unresolved external - merkwuerdig
-
Hi Leute
ich hab hier mal ein "unresolved external" der besonderen Art.
Ich hab im C++ Builder6 ein neues Formular angelegt, ein paar public memberfunctions hinzugefügt, selbige auch im cpp-File hinterlegt und in einem anderen Formular referenziert. Das übliche halt.
Hier mal der Header:
//--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TFormChart : public TForm { __published: // Von der IDE verwaltete Komponenten TPanel *Panel1; private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TFormChart(TComponent* Owner); void __fastcall SetBackgroundColor( TColor col ); void __fastcall RequestChart( const AnsiString &Gattung ); void __fastcall ProcessRequest( TXNetMessage *xmsg ); void __fastcall StatusKurse( bool bStatus ); }; //--------------------------------------------------------------------------- extern PACKAGE TFormChart *FormChart; //--------------------------------------------------------------------------- #endif
Das Sourcefile:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "includes.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- __fastcall TFormChart::TFormChart(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TFormChart::SetBackgroundColor( TColor col ) { this->Color = col; Panel1->Color = col; } //--------------------------------------------------------------------------- void __fastcall TFormChart::RequestChart( const AnsiString &Gattung ) { //bla int bla = -1; } //--------------------------------------------------------------------------- void __fastcall TFormChart::ProcessRequest( TXNetMessage *xmsg ) { // bla int bla = -1; } //--------------------------------------------------------------------------- void __fastcall TFormChart::StatusKurse( bool bStatus ) { // bla int bla = -1; }
und einer der Aufrufe ( aus MainFormular )
for ( int i=0; i<Screen->FormCount; i++ ) { TForm *f = Screen->Forms[i]; if ( f->ClassNameIs("TFormChart") ) ((TFormChart*)f)->SetBackgroundColor( col ); }
Dazu die passende Fehlermeldung:
[Linker Fehler] Unresolved external '__fastcall TFormChart::SetBackgroundColor(Graphics::TColor)' referenced from D:\PROJECTS\TEST\CHARTPROJEKT\FRONTEND\MAIN.OBJ
Was ich geprüft habe:
1. Das Headerfile wird in includes.h included.
2. Das Sourcefile gehört zum Projekt
3. Die Form wird nicht automatisch erzeugt, sollte aber kein Problem sein
4. Source und Headerfile befinden sich im Projektordner, daher sind zusätzliche include-Verzeichnisse nicht nötig
5. Borland C++ Builder hab ich auch schonmal neu gestaret
6. .obj-Files, .ddp-Files, .tds-File gelöscht und neu gebaut
7. Source-file wurde erfolgreich kompilierthat jemand noch eine Idee wo das Problem liegen könnte?
gruß Tobi
-
Ich bin mit dem Problem indessen auch nicht weitergekommen... es ist irgendwie sehr merkwürdig. Hab das ganze Formular gelöscht und komplett neu angelegt - hilft nix. Sobald ich die Funktionen irgendwie verwenden will, kommen die "unresolved externals".
-
Hi
wenn du alles richtig eingebunden hast, müsste ein Aufruf aus der main.cpp
FormChart->SetBackgroundColor( clWhite );
gehen.
Ansonsten denke ich, wird die Funktion dem Formular nicht zugeordnet, weil der Zeiger auf dieses Form falsch erstellt ist.
=> Zeiger casten
-
Ich hab es auch mal mit anderen casts versucht, aber das bringt auch keine Verbesserung.
Ich hab das Formular und die beiden Dateien jetzt anders benannt und es funzt. Scheinbar gab es da irgendwo eine Namenskollision. Zwar nicht innerhalb meines Projektes aber scheinbar irgendwo mit VCL - vermute ich zumindest.