Konwersja typów klas

0

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

 
#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

#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

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

Błędy

 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
0

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

Masz jedynie zadeklarowany konstruktor, ale go nie zdefiniowales.

0

sa jeszcze pliki:
Name.cpp

#include "Name.h"


Name::Name(void)
{
}


Name::~Name(void)
{
}
 

Kon.cpp

#include "Kon.h"


Kon::Kon(void)
{
}

Kon::~Kon(void)
{
}
 
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.

0

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

0

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

daj w H deklaracje klas a w cpp dolacz odpowiednie pliki

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1