Template in einer Classe expected ',' or '.' before numeric constant

Gast #6443523
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
}
Gast #6443580
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}?
Gast #6443589
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 ;-) )
Gast #6443610
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 von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren