Linker-Error
-
hi
ich hab ein funktionierendes Programm gehabt(mit Klasse von TCustomControl abgeleitet) und habe dann ne MouseDown-Methode deklariert (so wies sein soll). plötzlich zeigt mir das programm folgende Fehlermeldung an:[Linker Fehler] Unresolved external '__fastcall TMinefield::MouseDown(Controls::TMouseButton, System::Set<Classes::Classes__1, 0, 6>, int, int)' referenced from F:\C++\C++\MINESWEEPER\MINEFIELD\NEUUNIT1.OBJ
auch nachdem ich das in ein neues Programm geschrieben hatte, die OBJ dateien gelöscht hatte und BCB 6 neu installiert hatte!
ich glaube, dass es nichts bringt hunderte zeilen quelltext zu posten, der vorher funktionierte, also nur die fehlerhafte deklaration
class TMinefield : public TCustomControl { private: . . . protected: virtual void __fastcall Paint (void); DYNAMIC void __fastcall MouseDown (TMouseButton Button, Classes::TShiftState Shift, int X, int Y); public: . . . __fastcall TMinefield(TComponent* Owner); __published: };die selbe meldung kam auch mal beim Konstruktor vor, aber jedesmal so, dass ich da überhaupt nichts verändert hatte!!
das versteh ich alles nicht!!!!!

-
Hm, soweit ich weiß, hat der BCB6 Probleme mit Sonderzeichen in Projektverzeichnissen. Versuchs mal ohne die ++ in den Verzeichnisnamen.
-
Oder installiere Update 4; darin wird IIRC das Linker-Problem mit den '+' im Dateinamen behoben.
-
mit den ++ hat das nichts zu tun; hab das geändert und das Problem tritt immer noch auf!!
-
Hallo
Poste doch mal den Rumpf der Implemtation der MouseDown-Funktion aus deinem Code.
Das DYNAMIC solltest du eigentlich nicht brauchen.
bis bald
akari
-
das DYNAMIC hab ich auch nur aus nem buch abgeschrieben, weiß nich was das heißt!
was meinst du denn mit Rumpf, die Definition dafür, was die funktion machen soll?
-
Hallo
Dein Auszug bis jetzt zeigt nur die Deklaration. Irgendwo muß die Funktion ja auch implementiert werden.
void __fastcall TMinefield::MouseDown (TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { // Hier dein Code }bis bald
akari
-
hier bitte:
void __fastcall TMinefield::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { TCustomControl::MouseDown (Button, Shift, X, Y); for(int x=0;x<=p;x++) { if(X >= Links + x*(G+1) && X < Links + (x+1) * (G+1)) { for(int y=0;y<=p;y++) { if(Y >= Oben + y*(G+1) && X < Oben + (y+1) * (G+1)) { if(Button == mbLeft) { if(A[x][y] == 0) { Minen = Mine(x,y); if(Minen == 0) { Aufdecken(x,y) Paint(); } else { Aufschrift(Minen,x,y); Paint(); } } if(A[x][y] == 0) { Tod(x,y); } } if(Button == mbRight) { if(A[x][y]==0 || A[x][y]==1) { A[x][y] = A[x][y] + 10; Paint(); } if(A[x][y]==10 || A[x][y]==11) { A[x][y] = A[x][y] - 10; Paint(); } } if(Button == mbMiddle) { Fahnen = Aufdecken(x,y); if(Fahnen == Minen) Aufdecken(x,y); else { Test(x,y); if(A[x][y]==0 || A[x][y]==1) { A[x][y] = A[x][y] + 20; Paint(); } } } } } } } }da liegt aber nicht das problem, weil der fehler schon bei der deklaration aufgetreten ist, ohne dass ich die methode implementiert hatte.
genau das selbe problem hatte ich vorher mit der Paint()-methode, das ist aber jetzt wie weggeblasen

-
Ein "unresolved external" bedeutet immer, dass der Linker die zu einer Deklaration gehörenden Definition nicht findet. Entweder fehlt die Definition oder sie passt nicht zur Deklaration.
-
das hab ich auch schon in der hilfe von bcb gelesen, problem wäre halt nur, wie man das hinkriegt. ich habe nur den selben text aus ner datei kopiert, in der das funktioniert hat und die Definition für MouseDown- (und auch Paint-) fuktionen ist immer gleich!!
-
ich habs nochmal ausprobiert und der fehler kommt auch, wenn ich alles gelöscht habe und in der klasse nur die definition der MouseDown methode steht. hab keine ahnung mehr, was ich da noch machen kann
-
Wenn du willst kannst du mir mal dein Projekt rüberschicken. Aus den vorhandenen Codeschnipseln ersehe ich nichts weiter.
-
das problem hat sich einfach so erledigt. hatte statt der mousedown methode ein OnMouseDown ereignis implementiert, was schwere compilerfehler verursacht hat, sodass ich bcb über taskmanager beendet hab und danach ging die methode einfach wieder!! naja computer

trotzdem danke für die hilfe