Initialize an array of objects by referencing the constructor directly
-
Hallo
Wie es grundsätzlich funktioniert habe ich verstanden
http://www.java2s.com/Tutorial/Cpp/0180__Class/Initializeanarrayofobjectsbyreferencingtheconstructordirectly.htmaber, wie muss ich das bei Templates schreiben?
static CDelayEvent<int> Events[MAX_EVENTS] = { CDelayEvent<int>( 0, 0, -1, &Value1, &Value2 ), CDelayEvent<int>( 0, 0, -1, &Value3, &Value4 ) };error C2440: 'initializing' : 'class CDelayEvent<int>' kann nicht in 'class CDelayEvent<int>' konvertiert werden
Danke für eure Hilfe!
lg
-
CDelayEvent<int> hat auch einen passenden Konstruktor für Deine 5 Werte???
Folgendes Minimalbeispiel tut es nämlich:
template <typename T> struct A { A(T t1, T t2, T t3, T t4, T t5) {} }; int main() { static A<int> a[2] = { A<int>( 0, 0, -1, -2, -3 ), A<int>( 0, 0, -1, -5, -9 ) }; }
-
Der Copy-Ctor von CDelayEvent<int> muss vorhanden sein.
-
Danke für eure antworten.
Stimmt - hab jetzt ein kleines Sample geschrieben und dort funktioniert es auch (ohne Copy-Kontruktor) - das Programm wo das Problem auftritt ist nicht von mir geschrieben!
Wieso muss da ein Copy-Kontruktor vorhanden sein - versteh ich noch nicht.
Aber stimmt - da steht sogar noch was in der nächsten Zeile - sorry, übersehen
Kein Kopierkonstruktor für class 'CDelayEvent<int>' verfuegbarDanke!!!
-
Also unter Visual C++ 6.0 wird der Copy-Kontruktor benötigt. Unter Visual Studio 2005 nicht - man sieht dort aber im *.asm nicht, dass er hier etwas ähnliches machen würde.
Und die Probleme treten nur mit den Template-Klassen auf. Sonst geht es ja!
-
In der Klasse wird CList verwendet - daher wird der Copy-Konstruktur benötigt.
Danke und schönen Abend noch