我在想,为什么我不能打电话给构造函数.即使这个小例子也无法使用以下消息进行编译:
Klassentest.cpp:24:27: error: cannot call constructor 'Sampleclass::Sampleclass' directly [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我在版本4.9.3-1中使用了Cygwin g ++编译器.
谢谢您的帮助.
Sampleclass::Sampleclass() *qs = new Sampleclass::Sampleclass();
Run Code Online (Sandbox Code Playgroud)
是错的.Sampleclass是一个类型 while Sampleclass::Sampleclass是一个构造函数.由于语法正确
type identifier = new type();
Run Code Online (Sandbox Code Playgroud)
你需要在这里指定类型.
因此,使用
Sampleclass *qs = new Sampleclass();
Run Code Online (Sandbox Code Playgroud)
代替.
笔记:
如果您不知道:从C++ 11开始,您就可以做到
Sampleclass() = default;
Run Code Online (Sandbox Code Playgroud)
在类定义中,将定义默认构造函数.
是的,您不能直接致电ctor。
因为构造函数没有名称,所以在名称查找过程中永远找不到它们。
你可能想要
Sampleclass *qs = new Sampleclass;
Run Code Online (Sandbox Code Playgroud)
然后将调用ctor。
| 归档时间: |
|
| 查看次数: |
13444 次 |
| 最近记录: |