我想使用C ++在堆栈中构造一个对象。 你知道这些与调用构造函数的方法有什么区别(有和没有括号):
A)
MyClass object ;
b)中
MyClass object() ;
我正在使用MFC,在构建主应用程序的全局变量时,如果我使用后一种方式,我会得到一个例外,我认为这两种方式是等价的。
谢谢你们的任何信息。
答案 0 :(得分:21)
这是C ++的其中一个问题。
MyClass object();
是在C ++中定义函数 prototype 的方式,因此编译器认为你试图在另一个函数的中间声明另一个函数。
如果要调用默认构造函数(即不带参数的构造函数),请改用此语法:
MyClass object;
另见Garth Gilmour对现已删除的问题What is your (least) favorite syntax gotcha?的回答:
在C ++中
Employee e1("Dave","IT"); //OK Employee e2("Jane"); //OK Employee e3(); //ERROR - function prototype
答案 1 :(得分:9)
例如:
class MyClass
{
public:
MyClass()
{x = 0;}
MyClass(int X)
{x = X;}
private:
int x;
};
int main()
{
MyClass myObject(56); // initialize x to value '56'
MyClass myObject2; //calls default constructor and initializes x to 0
return 0;
}