我想知道,为什么我不能调用构造函数。即使是这个小示例也无法编译并显示以下消息:
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++ 编译器。
感谢您的帮助。
最佳答案
Sampleclass::Sampleclass() *qs = new Sampleclass::Sampleclass();
错了。 Sampleclass
是一个类型,而Sampleclass::Sampleclass
是一个构造函数。因为正确的语法是
type identifier = new type();
您需要在此处指定类型。
因此,使用
Sampleclass *qs = new Sampleclass();
相反。
注意事项:
如果您不知道:从 C++11 开始您可以简单地做
Sampleclass() = default;
在类定义中会定义默认构造函数。
关于C++在小例子中不能直接调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085147/