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