C++有参构造函数和无参构造函数的区别,怎么调用#include iostreamusing namespace stdstruct Foo{Foo()
C++有参构造函数和无参构造函数的区别,怎么调用
#include <iostream> using namespace std; struct Foo { Foo() {} Foo(int) {} void fun() {} }; int main() { Foo a(10); a.fun(); Foo b(); b.fun(); return 0; } 这样报错:error C2228: left of '.fun' must have class/struct/union type
但将Foo b(); 改为Foo b;就不会报错,是为什么?
[解决办法] http://bbs.chinaunix.net/thread-3744502-1-1.html 似乎这里的高手说了, 是标准规定了的.
调用默认构造函数 不能加括号, 除非是在new的时候.
如果你加了括号Foo b();, 它就会把这句当作是声明了一个函数b, 其返回值是Foo类型.
[解决办法] 有参数跟无参数 就是在调用时候有区别。
[解决办法] 引用: 有参数跟无参数 就是在调用时候有区别。 没看清说的什么,废话了。
这个对你有帮助或许
http://bbs.csdn.net/topics/230074883
[解决办法] 引用: http://bbs.chinaunix.net/thread-3744502-1-1.html 似乎这里的高手说了, 是标准规定了的. 调用默认构造函数 不能加括号, 除非是在new的时候. 如果你加了括号Foo b();, 它就会把这句当作是声明了一个函数b, 其返回值是Foo类型. ++
[解决办法] struct Foo { Foo() {} Foo(int) {} void fun() {} }; int main() { Foo a(10); a.fun(); Foo b = Foo(); c.fun(); return 0; }Foo()是一个函数,返回所创建的对象。
[解决办法] 对于无参数的或者默认构造函数来说,在构造对象时,一定不能加(),这样会造成歧义,编译器会把它当成一个函数的声明,其实你这时候要是设置断点,你会发现程序不会在这行运行。
其实这个细节,在C++ primer中讲过啊,好好把C++ primer看看,收获很大的
[解决办法] it define a function, not an object...
------解决方案--------------------
Foo b(); 你定义了一个函数,而不是一个对象,参考我在SO上的答案
http://stackoverflow.com/questions/17511629/why-wont-this-object-get-created-c/17511641#17511641
[解决办法] 引用: Foo b(); 你定义了一个函数,而不是一个对象,参考我在SO上的答案 http://stackoverflow.com/questions/17511629/why-wont-this-object-get-created-c/17511641#17511641更正: 你申明了一个函数,返回类型是Foo
[解决办法] Foo b();
是一个函数声明,而不是声明一个对象,原因是
如果这算作声明对象,那她还可以声明函数,就有了二义性,
于是规定
Foo b;
调用默认构造函数,声明(定义)对象;
Foo b();
声明名函数