| Autor |
Nachricht |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
17:49:07 02.02.2012 Titel: |
Nicht aufgelöstes externes Symbol... |
Zitieren |
Hallo!
Ich komm gleich zu meinem Problem.
Hier z.B.: die Klasse Device.h :
| C/C++ Code: | 1 2 3 4 5 6 7 8 | 1 2 3 4 5 6 7 8 | class Device
{
private :
public :
virtual void Draw() = 0;
static Device* Create();
};
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 | class Device
{
private :
public :
virtual void Draw() = 0;
static Device* Create();
};
| |
| C/C++ Code: | 1 2 3 4 5 6 7 8 | class Device
{
private :
public :
virtual void Draw() = 0;
static Device* Create();
};
| |
(Die Funktionen sind Leer.)
Ich weiß nicht ob der Fehler auch was damit zutun hat(ich denke eher nicht)
Trotzdem mal hier
Nun hab ich z.B.: die Klasse Data.h :
| C/C++ Code: | class Data : public Device
{
private :
public :
void Draw();
};
| |
| C/C++ Code: | class Data : public Device
{
private :
public :
void Draw();
};
| |
| C/C++ Code: | class Data : public Device
{
private :
public :
void Draw();
};
| |
(Funktion Draw ist hier auch leer)
So.Jetzt in main.cpp hab ich das ganze dann z.B. so
| C/C++ Code: | ...
int main()
{
Device* dev = Device::Create();
dev->Draw();
}
| |
| C/C++ Code: | ...
int main()
{
Device* dev = Device::Create();
dev->Draw();
}
| |
| C/C++ Code: | ...
int main()
{
Device* dev = Device::Create();
dev->Draw();
}
| |
Der Fehler :
| Code: | mainConAPI.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static class device::Device * __cdecl device::Device::Create(void)" (?Create@Device@device@@SAPAV12@XZ)".
1>D:\ConsoleAPI\Debug\ConsoleAPI.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. | |
| Code: | mainConAPI.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static class device::Device * __cdecl device::Device::Create(void)" (?Create@Device@device@@SAPAV12@XZ)".
1>D:\ConsoleAPI\Debug\ConsoleAPI.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. | |
| Code: | mainConAPI.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static class device::Device * __cdecl device::Device::Create(void)" (?Create@Device@device@@SAPAV12@XZ)".
1>D:\ConsoleAPI\Debug\ConsoleAPI.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. | |
Ich hab das Gefühl das es einfach irgendweine Kleinigkeit ist, die mein Gehirn aber nicht mehr registrieren will, da sie 100% von diesem Code überzeugt ist...
Naja, vielen Dank schonmal |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
_matze
Mitglied
Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9602
|
_matze Mitglied
17:52:12 02.02.2012 Titel: |
|
Zitieren |
Die Implementation von Device::Create() fehlt. Du hast in der Klassendefinition lediglich eine Deklaration stehen. |
_________________ Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
|
|
 |
drakon
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.01.2008
Beiträge: 6824
|
drakon Mitglied
17:52:26 02.02.2012 Titel: |
|
Zitieren |
Der Compiler findet die Definition von Device::Create nicht. Ich auch nicht... |
_________________ Blog: www.drakon.ch
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
17:53:45 02.02.2012 Titel: |
|
Zitieren |
OH JESUS....
| C/C++ Code: | | Device* Device::Create(){}
| |
| C/C++ Code: | | Device* Device::Create(){}
| |
| C/C++ Code: | | Device* Device::Create(){}
| |
War so klar... naja danke ^^ |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4840
|
cooky451 Mitglied
17:55:54 02.02.2012 Titel: |
|
Zitieren |
Nur mal so nebenbei: Warum packst du das nicht in den Konstruktor? |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
18:10:37 02.02.2012 Titel: |
|
Zitieren |
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4840
|
cooky451 Mitglied
18:28:19 02.02.2012 Titel: |
|
Zitieren |
Wozu soll deine Create() Funktion da sein, und warum lässt sich das nicht in den Konstruktor verlagern? |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
|
|
 |
daddy_felix
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2012
Beiträge: 70
|
daddy_felix Mitglied
18:31:07 02.02.2012 Titel: |
|
Zitieren |
und warum gibst du da einen Pointer zurück? du rufst doch hoffentlich irgendwo auch delete auf? Oder hast du irgendwo ein statisches/globales Objekt?
Wie sieht denn deine Create-Methode aus? |
|
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
20:01:51 02.02.2012 Titel: |
|
Zitieren |
@cooky Ja gute idee kann ich eig. machen
| daddy_felix schrieb: | und warum gibst du da einen Pointer zurück? du rufst doch hoffentlich irgendwo auch delete auf? Oder hast du irgendwo ein statisches/globales Objekt?
Wie sieht denn deine Create-Methode aus? |
Pointer deswegen http://en.wikipedia.org/wiki/Abstract_factory_pattern
Create-Methode ist leer wie du meinem ersten post entnehmen kannst |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
daddy_felix
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2012
Beiträge: 70
|
daddy_felix Mitglied
10:32:13 03.02.2012 Titel: |
|
Zitieren |
die Methode kann nicht leer sein, weil sie einen Rückgabetyp hat. Bitte poste die Methode so, wie du sie in deinem Code stehen hast.
Ich bin mir auch nciht sicher, ob du das Pattern so richtig verstanden hast. So, wie du es momentan hast, wird es nicht funktionieren. Du brauchst mindestens noch ein Argument für die Create-Methode - oder alternativ unterschiedliche Create-Methoden (so mache ich es meistens). Und dann würde ich auch keinen raw Pointer zur+ckgeben, sondern einen shared_ptr.
Aber das ist ein anderes Thema... |
|
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
11:52:38 03.02.2012 Titel: |
|
Zitieren |
Ich hab noch nicht richtig angefangen mit dem was ich da machen will, ich frag jetzt gleich am Anfang um später nicht alles neu/korregieren zu müssen.
Die Create Funktion könnte so aussehen ?!
| C/C++ Code: | Device* Device::Create(string sClass) {
if ( sClass == "Gui" ) return new Gui();
return NULL;
}
| |
| C/C++ Code: | Device* Device::Create(string sClass) {
if ( sClass == "Gui" ) return new Gui();
return NULL;
}
| |
| C/C++ Code: | Device* Device::Create(string sClass) {
if ( sClass == "Gui" ) return new Gui();
return NULL;
}
| |
|
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
daddy_felix
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2012
Beiträge: 70
|
daddy_felix Mitglied
12:58:42 03.02.2012 Titel: |
|
Zitieren |
was heißt "könnte"? Gibt es irgendwo eine solche Funktion oder nicht? |
|
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
13:16:23 03.02.2012 Titel: |
|
Zitieren |
Ja die gibt es aber nur mit dem return NULL; drinnen |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
daddy_felix
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2012
Beiträge: 70
|
daddy_felix Mitglied
14:57:23 03.02.2012 Titel: |
|
Zitieren |
poste doch bitte mal den *vollständigen* Code, also mit allen beteiligten Dateien. Das dürfte bei deienm Mini-Beispiel ja recht übersichtlich sein.
Das "nichtaufgelöste externe Symbol" bedeutet, dass er die Definition der Methode nicht findet. Da ist es schon wichtig, wie und wo du diese Methode definiert hast. |
|
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4840
|
cooky451 Mitglied
15:07:01 03.02.2012 Titel: |
|
Zitieren |
Was soll das überhaupt werden? Was willst du erreichen? Und wozu bitte brauchst du hier das Factory Pattern? oO |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
15:37:27 03.02.2012 Titel: |
|
Zitieren |
ehm es läuft doch schon längst?Ich glaube das ist ein Missverständnis.
@cooky Lesen,ausprobieren und lernen |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
daddy_felix
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2012
Beiträge: 70
|
daddy_felix Mitglied
15:38:53 03.02.2012 Titel: |
|
Zitieren |
oh sorry... ich dachte irgendwie, da wären noch mehr Fehler. Dann bin ich jetzt ruhig |
|
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4840
|
cooky451 Mitglied
15:39:07 03.02.2012 Titel: |
|
Zitieren |
| 7xCore schrieb: | | Lesen,ausprobieren und lernen | Du willst also einfach nur das Pattern implementieren ohne irgendeinen Zusammenhang? |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
17:57:17 03.02.2012 Titel: |
|
Zitieren |
| cooky451 schrieb: | | 7xCore schrieb: | | Lesen,ausprobieren und lernen | Du willst also einfach nur das Pattern implementieren ohne irgendeinen Zusammenhang? |
Ehm schon?Ist doch normal, das man erstmal was neues lernt und danach einsetzt?Oder machst du das anders ? |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4840
|
cooky451 Mitglied
18:08:43 03.02.2012 Titel: |
|
Zitieren |
| 7xCore schrieb: | | Ehm schon?Ist doch normal, das man erstmal was neues lernt und danach einsetzt?Oder machst du das anders ? | Ja, total. Ich lerne nur das was ich brauche. Wenn ich ein neues Pattern sehe, nehme ich es war, merke mir dass es so ein Konzept gibt, und wenn ich mal ein Problem habe das ich damit lösen könnte, lese ich mir alle Artikel dazu durch die ich finden kann und versuche den für die Lösung optimalen Weg zu gehen.
Bei neuen Sprachfeatures mag das etwas anders sein, aber die meisten Muster sind ja doch recht einfach, sodass das Implementieren ohne Kontext eigentlich einem Abschreiben gleichkommt, das einem keinerlei neue Erkenntnisse bringt. |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Zuletzt bearbeitet von cooky451 am 18:10:28 03.02.2012, insgesamt 1-mal bearbeitet |
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 386
|
7xCore Mitglied
12:30:00 04.02.2012 Titel: |
|
Zitieren |
| cooky451 schrieb: | | 7xCore schrieb: | | Ehm schon?Ist doch normal, das man erstmal was neues lernt und danach einsetzt?Oder machst du das anders ? | Ja, total. Ich lerne nur das was ich brauche. Wenn ich ein neues Pattern sehe, nehme ich es war, merke mir dass es so ein Konzept gibt, und wenn ich mal ein Problem habe das ich damit lösen könnte, lese ich mir alle Artikel dazu durch die ich finden kann und versuche den für die Lösung optimalen Weg zu gehen.
Bei neuen Sprachfeatures mag das etwas anders sein, aber die meisten Muster sind ja doch recht einfach, sodass das Implementieren ohne Kontext eigentlich einem Abschreiben gleichkommt, das einem keinerlei neue Erkenntnisse bringt. |
Stimm ich dir 100% zu |
_________________ Mehr Spaß mit der Windows Konsole? -> http://www.coreengine.de.vu
|
|
 |