Test2 t(Test(i)); => non-aggregate type?
-
Kann mir jemand sagen was ich falsch mache?
#include <iostream> class Test { public: Test(int i) { } }; class Test2 { public: Test2(const Test&) { } void foo() { } }; int main() { int i; Test2 t(Test(i)); t.foo(); }
error: request for member `foo' in `t(Test)', which is of
non-aggregate typeTest2 ()(Test)' warning: unused variable
int i'Wenn ich den Test2 t(Test(i)); in 2 Zeilen auseinander nehme geht es.
Und wenn ich den Aufruf von foo wegnehme kommt nur noch die unused variable Warnung.Muss man das in zwei Zeilen schreiben? Oder kann man das dem Compiler auch anders beibringen?
-
Versuchs mal so:
int i=2; Test2 t=Test(i); t.foo();
-
hawk-c schrieb:
Test2 t(Test(i));
Diese Zeile ist das Problem. Da wird keine neue Variable definiert sondern eine Funktion t deklariert, die ein Test mit Namen i annimmt und ein Test2 zurückgibt. Also äquivalent zu:
Test2 t(Test i);
Bei C++ gewinnt eine Deklaration vor einer Definition, wenn sie identisch aussehen. Du kannst das gewünschte Verhalten so forcieren:
Test2 t( (Test(i)) );