我在想,为什么我不能调用构造函数。即使这个小例子也无法使用以下消息进行编译:
Klassentest.cpp:24:27: error: cannot call constructor 'Sampleclass::Sampleclass' directly [-fpermissive]
代码:
#include <iostream>
using namespace std;
class Sampleclass
{
public:
Sampleclass();
};
Sampleclass::Sampleclass(){
}
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
Sampleclass::Sampleclass() *qs = new Sampleclass::Sampleclass();
return 0;
}
我在版本4.9.3-1中使用了Cygwin g ++编译器。
感谢您的帮助。
答案 0 :(得分:7)
Sampleclass::Sampleclass() *qs = new Sampleclass::Sampleclass();
错了。 Sampleclass
是类型,而Sampleclass::Sampleclass
是构造函数。由于正确的语法是
type identifier = new type();
您需要在此处指定类型。
因此,请使用
Sampleclass *qs = new Sampleclass();
代替。
注意:
如果您不知道:从C ++ 11开始,您就可以完成
Sampleclass() = default;
在类定义中,将定义默认构造函数。
答案 1 :(得分:4)
是的,您无法直接致电ctor。
从标准class.ctor/2
开始因为构造函数没有名称,所以在名称查找期间永远找不到它们;
你可能想要
Sampleclass *qs = new Sampleclass;
然后将调用ctor。
答案 2 :(得分:1)
#include <iostream>
using namespace std;
class Sampleclass
{
public:
Sampleclass();
};
Sampleclass::Sampleclass(){
}
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
Sampleclass *qs = new Sampleclass::Sampleclass();
return 0;
}
您尝试在实例化类时将构造函数作为类型引用。
答案 3 :(得分:0)
在C ++中,如果定义该类的新变量/实例,则会自动调用构造函数。
按照以下链接查看一些简单示例,如何使用构造函数: http://www.tutorialspoint.com/cplusplus/cpp_constructor_destructor.htm