我想知道为什么不能调用构造函数。即使这个小的示例也无法使用以下消息进行编译:

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;
    

    在类定义中,将定义默认构造函数。
  • 08-19 18:09