C ++不能直接在小例子中调用构造函数

时间:2015-12-04 09:41:16

标签: c++ constructor

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

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 ++编译器。

感谢您的帮助。

4 个答案:

答案 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