Precompiled headers - identifier not found

0

Witam. Tworzę swój pierwszy program. Mam problem mianowicie podczas kompilacji nie wykrywa mi funkcji.
Mam stdafx.h, w nim includy na kilkanaście plików:

#include nagłówków
//...

#include tych plików
//...

#include pliku z funkcją której nie wykrywa

Funkcja wygląda mniej tak:

namespace Memory
{
   static inline PVOID GetAddress(PVOID Instance, HMODULE Module)
   {
	//...
   }
}

W tych plikach wywołuję ją tak:

class Drawing
{
public:
	Type Function(...)
	{

		return ((Type)GetAddress(this, ...))(this, ...);
	}
}

Error:

Error	3	error C3861: 'GetAddress': identifier not found

Gdy umieszczę tą funkcje w pliku w którym wywołuję wszystko działa. Problem w tym że nie mogę zmienić kolejności w stdafx.h, bo wtedy wysypują się drugie pliki. Jak mogę rozwiązać ten problem?

1

Precompiled headers służą do umieszczania w nich includów bibliotek i ew. plików, które się rzadko zmieniają. Proponowałbym wyrzucenie ich z PCH. Tak czy inaczej problem możesz rozwiązać poprzez forward declaration (umieść w tych plikach samą deklarację funkcji GetAddress).

0

C++ działa najlepiej, gdy w pliku .h będzie tylko deklaracja (nagłówek funkcji) a ciało funkcji w pliku .cpp.

Wrzucanie całych funkcji do nagłówków to proszenie się o tego typu kłopoty i powinno być stosowane tylko w przypadku szablonów.

0

Ok, przebudowałem sobie całkowicie program i teraz funkcje działają dobrze. Mam jednak problem ze stałymi.
Oto mój plik który dodaję do wszystkich tych plików:

namespace Number
{
	namespace Drawing
	{
		const int Draw = X;
	}

Odwołuję się do niej tak:

Number::Drawing::Draw

Kompilator widzi stałą ale podczas kompilacji dostaję error

Error 1 error C2653: 'Number' : is not a class or namespace name

Co robię tu źle?

0

No właśnie że includuje, jak napisałem nawet kompilator to widzi :/

0

Ok, już rozwiązałem problem.

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