Array mit Klassen
-
Ich möchte einen Array erzeugen der die Klasse in der er sich befindet beinhaltat. Dies tönt nun etwas kompliziert und sinnlos, aber ich möchte dies so lösen, da ich einen Pointer auf die Klasse erhalten muss und diese mehrmals initialisert wird. (ist nicht bekannt wie oft)
ich habe nun einen Array so definiert:
static CArray<CBoardCommunication*,CBoardCommunication*> m_apBoardCommunication;Die static Funktion welche den Pointer zurückgiebt sieht so aus:
CBoardCommunication* CBoardCommunication::Get(int nBoardNumber) { // Kontrolle ob nBoardNumber grösser als 1 ist. (0 ist nicht zulässig) if(nBoardNumber>0) { nBoardNumber=1; } // Klasse solang neu initialisieren bis die Anzahl welche benötigt wird // vorhanden ist while(m_apBoardCommunication.GetSize()<nBoardNumber-1) { m_apBoardCommunication.Add(new CBoardCommunication(nBoardNumber)); } return m_apBoardCommunication[nBoardNumber-1]; }Nun zum Problem...
Wenn ich nur diese Klasse kompiliere funktioniert dies.
Sobald ich jedoch das ganze Projekt kompiliere bekomme ich immer diese Fehlermeldung:IPA-TestApplikation error LNK2001: Nichtaufgelöstes externes Symbol "public: static class CArray<class CBoardCommunication *,class CBoardCommunication *> CBoardCommunication::m_apBoardCommunication" (?m_apBoardCommunication@CBoardCommunication@@2V?$CArray@PAVCBoardCommunication@@PAV1@@@A)Kann mir jemand sagen wo das Problem liegt und wie ich es beheben kann?
-
Erstens mußt du zu der static-Deklaration dort oben noch eine Definition mitliefern (die sagt dem Compiler, in welcher Übersetzungseinheit die Variable "leben" soll):
//am besten in der CPP deiner Klasse: CArray<CBoardCommunication*,CBoardCommunication*> CBoardCommunication::m_abBoardCommunication;Und zweitens ist deine if()-Bedingung falsch - du ersetzt alle Indizes außer 0 durch 1. Zu der Beschreibung passt "if(nBoardNumber<=0) nBoardNumber=1;".
(btw, was spricht dagegen Board 0 zu verwenden?)
-
Vielen Dank!
Ich kann 0 nicht verwenden, da ich IDs vergebe. Jedes Endgerät welches mit der Klasse kommuniziert hat eine ID... Der PC hat dabei die ID0 aus diesem Grund darf ich diese nicht mehr vergeben...