Template-abhängigen Konstruktor deklarieren
lima-city → Forum → Programmiersprachen → C/C++ und D
argument
aussehen
code
compiler
definieren
deklaration
erachten
fehler
fehlermeldung
hand
ignorieren
klappen
nachbar
obacht
parameter
streich
type
vergessen
versuch
zeile
-
Angenommen ich habe die Deklaration
template<typename T> struct foo;
Wie würde dann die Deklaration für den Konstruktor aussehen?
Folgende Variante
template<typename T> foo::foo( T a ); //Zeile 3
funktioniert jedenfalls nicht:
decl.cpp:3: Fehler: »template<class T> struct foo« used without template parameters decl.cpp:3: Fehler: expected constructor, destructor, or type conversion before »;« token
Und um das zu betonen: Ich möchte nur deklarieren, nicht definieren!Abstimmung (Nur eine Auswahl möglich)
Geht nicht 0 % (0 Stimmen) Müsste möglich sein 0 % (0 Stimmen) Ist möglich 100 % (1 Stimme) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also folgendes funktioniert bei mir:
#include <iostream> using namespace std; template<typename T> struct foo { foo(T a); T var; }; template<typename T> foo<T>::foo(T a) { var = a; } int main(void) { foo<int> bar(42); cout << bar.var << endl; return 0; }
-
Das ist nicht das, was ich haben möchte. Du hast sowohl die Klasse als auch den Konstruktor definiert. Ich möchte aber, dass sie nur deklariert sind.
-
Dann sollte es auch mit dem Nachbarn klappen.
Leider nein.
template<typename T> struct foo; template<typename T> foo<T>::foo( T a ); int main() { int a = 42; foo FOO( a ); }
Ergibt die Fehlermeldungen
constr.cpp:3: Fehler: invalid use of incomplete type »struct foo<T>« constr.cpp:1: Fehler: declaration of »struct foo<T>« constr.cpp: In function »int main()«: constr.cpp:7: Fehler: missing template arguments before »FOO« constr.cpp:7: Fehler: expected »;« before »FOO«
-
Der Fehler liegt jetzt meines Erachtens auch wo anders, nämlich in der Deklaration der Variablen FOO, da nun dort das Template fehlt.
template<typename T> struct foo; template<typename T> foo<T>::foo( T a ); int main() { int a = 42; foo<int> FOO( a ); }
OBACHT: Ich habe hier keinen Compiler zur Hand. Falls die Templateklasse keine primitiven Datentypen verträgt, dann versuchs mal mit:
class Wrapper { public: int a; Wrapper (int a) { this->a = a; }; }; template<typename T> struct foo; template<typename T> foo<T>::foo( T a ); int main() { Wrapper w (42); foo<Wrapper> FOO(w); }
Wie gesagt: kein Compiler => nicht getestet => also fehlende Strichpunkte etc. bitte ignorieren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage