Precompiled headers - identifier not found

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:

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

#include tych plików
//...

#include pliku z funkcją której nie wykrywa

Funkcja wygląda mniej tak:

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

W tych plikach wywołuję ją tak:

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

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

Error:

Kopiuj
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?

IE
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:32
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).

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
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:

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

Odwołuję się do niej tak:

Kopiuj
Number::Drawing::Draw

Kompilator widzi stałą ale podczas kompilacji dostaję error

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

Co robię tu źle?

Azarien
nie inkludujesz nagłówka.
0

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

0

Ok, już rozwiązałem problem.

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.