为什么这个自定义类的声明不被接受?

时间:2011-10-19 02:38:56

标签: c++ forward-declaration

在我的代码中,我想声明一个我的自定义类的实例:

 MyClass anInstance;
 if(something){
      anInstance = MyClass("instantiated like this");
 }else{
      anInstance = MyClass("not instantiated like that");
 }
 //use my anInstance object
 ...

我的IDE正在标记我声明anInstance的第一行,它说:No matching constructor for initialization of 'MyClass'

这有什么违法行为吗?

4 个答案:

答案 0 :(得分:4)

MyClass可能缺少默认构造函数。如果是这样,您需要在声明它时对其进行初始化。像这样:

MyClass anInstance(something ? "instantiated like this" : "not instantiated like that");

答案 1 :(得分:2)

前向声明不足以执行导致指针的任何其他操作。

如果您需要执行任何操作,例如实例化该类,您将需要完整的声明。你有没有理由不只是拉入包含该类的.h文件?

答案 2 :(得分:1)

为MyClass提供一个构造函数,它采用如下字符串文字:

MyClass {
   public:
   MyClass(const std::string &s):str(s) {}
};

答案 3 :(得分:1)

你只需要做

class MyClass {
  public:
    MyClass() {}
    //other code
};