我正在尝试定义我的类的构造函数和析构函数,但我不断收到错误消息:
隐式声明的 'x::x()' 的定义
这是什么意思?
部分代码:
///Constructor
StackInt::StackInt(){
t = (-1);
stackArray = new int[20];
};
///Destructor
StackInt::~StackInt(){
delete[] stackArray;
}
我正在尝试定义我的类的构造函数和析构函数,但我不断收到错误消息:
隐式声明的 'x::x()' 的定义
这是什么意思?
部分代码:
///Constructor
StackInt::StackInt(){
t = (-1);
stackArray = new int[20];
};
///Destructor
StackInt::~StackInt(){
delete[] stackArray;
}
在类声明中(可能在头文件中),您需要具有如下所示的内容:
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()'
要记住的另一件事是构造函数访问的所有内容都必须是公共的。我以前收到过这个错误。
class X{
T *data;
public: // <-move this to include T *
X();
~X();
}
这段代码仍然有错误,因为在我的构造函数中我有以下内容:
X::X(){data = new T();
这意味着虽然我将构造函数和析构函数设为公开,但它们使用的数据仍然是私有的,并且我仍然得到“隐式声明的定义”错误。