Forum: PC-Programmierung Template in einer Classe expected ',' or '.' before numeric constant


von Hans (Gast)


Lesenswert?

Hi Leute, ich stehe grade auf dem Schlauch...

Wieso kiege ich die Fehlermeldung wenn ich versuche die Template in der 
Classe anzulegen und in der Main funtionier es ohne Probleme?
1
template<typename T1> class testT{
2
3
T1 t1;
4
public:
5
testT(T1 t):
6
t1(t)
7
{}
8
9
T1 get()
10
{return t1;}
11
};
12
13
class test{
14
public:
15
testT <int> obj(3); // compiliert nicht. Fehler expected ',' or '...' before numeric constant
16
};
17
18
main(){
19
testT <int> obj(3); // compiliert ohne Fehler
20
21
while(1){
22
}
23
}

von mh (Gast)


Lesenswert?

Du darfst an der Stelle keine Variable initialisieren, nur definieren. 
Du musst also nen Konstruktor schreiben.

von Rolf M. (rmagnus)


Lesenswert?

mh schrieb:
> Du darfst an der Stelle keine Variable initialisieren, nur definieren.

Initialisieren darf man sie dort schon, aber nicht so. {} oder = sollte 
gehen.

von Hans (Gast)


Lesenswert?

OK Danke

Den Weg von Rolf hab ich gesucht.
1
template<typename T1> class testT{
2
3
T1 t1;
4
public:
5
testT(T1 t):
6
t1(t)
7
{}
8
9
T1 get()
10
{return t1;}
11
};
12
13
class test{
14
public:
15
test(): obj(3){}
16
testT <int> obj; // compiliert ohne Fehler
17
oder
18
testT <int> obj{3}; // compiliert ohne Fehler
19
oder
20
testT <int> obj=3; // compiliert ohne Fehler
21
};
22
23
main(){
24
test t; 
25
testT <int> obj(3); // compiliert ohne Fehler
26
27
while(1){
28
}
29
}

Kann mir bitte einer mal am rande mein Gedächniss aufftischen.
Wieso gehts über die obj{3}?

von mh (Gast)


Lesenswert?

Rolf M. schrieb:
> mh schrieb:
>> Du darfst an der Stelle keine Variable initialisieren, nur definieren.
>
> Initialisieren darf man sie dort schon, aber nicht so. {} oder = sollte
> gehen.

Ja stimmt. (Bei den Nachteilen beider Varianten, werd ich das weiter 
ignorieren und niemandem empfehlen ;-) )

von mh (Gast)


Lesenswert?

Hans schrieb:
> testT <int> obj{3}; // compiliert ohne Fehler

Das schränkt dich aber häufig auf ein Subset der Konstruktoren ein, die 
zur Verfügung stehen.
1
std::vector<int> vec{3};
Erzeugt einen vector mit einem Element, statt den 3 Elementen die
1
std::vector<int> vec = std::vector<int>(3);
liefert.

Hans schrieb:
> testT <int> obj=3; // compiliert ohne Fehler

Es compiliert, aber nur bis du an den Konstruktor das Wort "explicit" 
schreibst, das da wahrscheinlich hingehört. Dann wird es ein
1
testT<int> obj = testT<int>(3);

Beitrag #6443824 wurde vom Autor gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.