Fehlermeldung bei Visual C
-
class CGraphic * gx" (?gx@@3PAVCGraphic@@A) bereits in main.obj definiert
diese Meldung bekomme ich. Doch in der Datei main.h und main.cpp ist die Klasse 100% nicht definiert. Warum schreibt er das dann?
Codausschnitt:
Datei main.h#ifndef MAIN_H #define MAIN_H . . . #include "util.h"
Datei util.h
#ifndef UTIL_H #define UTIL_H . . . CGraphic *gx;
-
Lorenzo2 schrieb:
diese Meldung bekomme ich. Doch in der Datei main.h und main.cpp ist die Klasse 100% nicht definiert. Warum schreibt er das dann?
Weil du dich irrst. Überprüfe nochmal alles genau!
Bye, TGGC
-
Das Programm ist sehr klein. So kleine das ich 100% nichts übersehen habe.
Vielleicht liegt es daran das ich alles in verschiedene Ordner Speichere.
Der Arbeitsbereich sieht so aus:GAME |_MAIN | |_main.cpp | |_main.h | |_ENGINE |_UTIL | |_util.cpp | |_util.h | |_BASIS |_graphic.cpp |_graphic.h
In der Datei main.cpp ist die WinMain Funktion.
In der Datei util.cpp sind ein paar Hilfsfunktionen
In der Datei graphic.cpp ist alles was mit Grafikausgabe zu tun hat.main.cpp
#include"main.h" int WINAPI WinMain( HINSTANCE hinst,HINSTANCE hprevinst,LPSTR lpcmdline,int ncmdshow) . . .
main.h
#ifndef MAIN_H #define MAIN_H . . . #include <windows.h> #include "graphic.h" #include "util.h"
graphic.cpp
#ifndef GRAPHIC_CPP #define GRAPHIC_CPP #include"graphic.h" CGraphic::CGraphic() . . .
graphic.h
#ifndef GRAPHIC_H #define GRAPHIC_H #define DIRECTDRAW_VERSION 0x0700 #pragma comment(lib,"dxguid.lib") #pragma comment(lib,"ddraw.lib") #include <ddraw.h> class CGraphic { private: . . .
util.cpp
#ifndef UTIL_CPP #define UTIL_CPP #include"Util.h" . . .
util.h
#ifndef UTIL_H #define UTIL_H #include <math.h> #include "graphic.h" CGraphic *gx; //So geht es nicht! //extern CGraphic *gx -->so geht es. Dazu muss ich aber in main.h CGraphic *gx //definieren. . . .
Ich muss jede Variable in main.h definieren. Das Programm akzeptiert keine globalen Defination in anderen Dateien
-
Kein Tipp für mich?
-
Im Header werden keine Variablen definiert, nur mittels extern deklariert, also lediglich bekannt gemacht.
Die eigentliche Definition darf es nur einmal in einer cpp-Datei geben.
-
Danke
-
Hallo, jetzt habe ich Probleme wenn ich Funktionen als inline deklariere.
-
Wenn inline muss die Funktion bei der Verwendung ganz bekannt sein, muss also leider komplett im Header stehen.