Konwersja typów klas

Konwersja typów klas
AN
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:78
0

Witam mam problem z konwersja w klasach. Robię tak jak jest napisane w książce, ale wywala błędy:
Kon.h

Kopiuj
 
#pragma once
#include <iostream>
class Name;
class Kon
{
private:
	float x;
	float y;
public:
	void zmien(float X, float Y)
	{
		x = X;
		y= Y;
	}
	void wypisz(Kon X)
	{
		std::cout<<X.x;
	}
	Kon(Name X)
	{
		x = X.c;
	}
	Kon(void);
	~Kon(void);
};

Name.h

Kopiuj
#pragma once
#include "Kon.h"
class Name
{
private:
	float c;
public:
	void wypisz(Name X)
	{
		std::cout<<X.c;
	}
	void zmienC(float g)
	{
		c=g;
	}
	friend Kon::Kon(Name);
	Name();
	~Name(void);
};

 

Main.cpp

Kopiuj
 
#include "Name.h"
int main()
{
	Kon X;
	Name W;
	W.zmienC(5);
	X.wypisz(W);
	getchar();
}

Błędy

Kopiuj
 1>kon.h(21): error C2027: use of undefined type 'Name'
kon.h(3) : see declaration of 'Name'
kon.h(21): error C2228: left of '.c' must have class/struct/union
 Kon.cpp
 error C2027: use of undefined type 'Name'
kon.h(3) : see declaration of 'Name'
kon.h(21): error C2228: left of '.c' must have class/struct/union
fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

nie wierze ze jest tak w ksiazce.
Jezeli tak jest to zmien ksiazke.

Masz jedynie zadeklarowany konstruktor, ale go nie zdefiniowales.

AN
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:78
0

sa jeszcze pliki:
Name.cpp

Kopiuj
#include "Name.h"


Name::Name(void)
{
}


Name::~Name(void)
{
}
 

Kon.cpp

Kopiuj
#include "Kon.h"


Kon::Kon(void)
{
}

Kon::~Kon(void)
{
}
 
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Te kody są w ogóle bez sensu i na pewno sie to nie skompiluje w taki sposób. Żeby sie kompilowało musiałbyś includować Name.h w Kon.h bo inaczej kompilator nie wie że Name ma pole X.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
EM
że Name ma pole c a nie X - wiem czepiam się mistrza xd
Shalom
bo autor daje tam jakieś jednoliterkowe nazwy zmiennych :P
AN
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:78
0

no to jak to powinno byc podzielone, jak mam wszystko w main to dziala, a jak rozdzielilem na dwa pliki to nie dziala.

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

http://en.wikipedia.org/wiki/Forward_declaration

daj w H deklaracje klas a w cpp dolacz odpowiednie pliki

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Należy myślec a nie klepać! Jeśli w jakimś pliku odwołujesz się do pól klasy to DEFINICJA tej klasy musi być znana bo inaczej kompilator nie wie jakie ta klasa ma pola. Deklaracja zapowiadająca nie wystarczy! Możesz ciała funkcji wrzucic do plików źródłowych *.cpp includujac odpowiednie nagłówki, albo includować odpowiednie nagłówki w nagłówkach jeśli chcesz mieć ciała metod razem z definicjami klas.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.