web-dev-qa-db-ja.com

コンストラクタ/デストラクタ定義に関連するc ++コンパイルエラー

クラスのコンストラクタとデストラクタを定義しようとしていますが、エラーが発生し続けます。

暗黙的に宣言された 'x :: x()'の定義

どういう意味ですか?

コードの一部:

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

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

クラス宣言(おそらくヘッダーファイル内)には、次のようなものが必要です。

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()'
49
Michael Burr

覚えておくべきもう1つのことは、コンストラクターがアクセスするすべてのものがパブリックでなければならないということです。以前にこのエラーが発生しました。

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

私のコンストラクターには次のものがあったため、このコードにはまだエラーがあります。

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

つまり、コンストラクタとデストラクタをパブリックにしたにもかかわらず、それらが処理しているデータはまだプライベートであり、「暗黙的に宣言された」エラーが発生しました。

0
taronish4