c ++编译与构造函数/析构函数定义相关的错误

时间:2009-04-02 01:53:08

标签: c++ constructor destructor

我正在尝试定义我的类的构造函数和析构函数,但我一直收到错误:

  

隐式声明的'x :: x()'

的定义

这是什么意思?

部分代码:

///Constructor
StackInt::StackInt(){
    t = (-1);
    stackArray = new int[20];
};

///Destructor
StackInt::~StackInt(){
    delete[] stackArray;
}

2 个答案:

答案 0 :(得分:47)

在类声明中(可能在头文件中),您需要具有以下内容:

class StackInt {
public:
    StackInt();
    ~StackInt();  
}

让编译器知道你不需要默认的编译器生成版本(因为你提供它们)。

声明可能会有更多,但你至少需要那些 - 这将让你开始。

你可以通过非常简单的方式看到这一点:

class X {
        public: X();   // <- remove this.
};
X::X() {};
int main (void) { X x ; return 0; }

编译它并且它有效。然后使用注释标记删除该行并再次编译。你会看到你的问题出现了:

class X {};
X::X() {};
int main (void) { X x ; return 0; }

qq.cpp:2: error: definition of implicitly-declared `X::X()'

答案 1 :(得分:0)

要记住的另一件事是构造函数访问的所有内容都必须是公共的。我之前收到了这个错误。

class X{
   T *data;
 public:      // <-move this to include T *
   X();
   ~X();
}

此代码仍有错误,因为在我的构造函数中,我有以下内容:

X::X(){data = new T();

这意味着虽然我已经将构造函数和析构函数设为public,但他们使用的数据仍然是私有的,我仍然得到了“隐式声明的”定义错误。