ページ 11

デストラクタ

Posted: 2010年7月24日(土) 20:54
by よつどもえ
(この記事は管理人が復元しました)

もうひとつ質問です。
次のプログラムで
#include<iostream>
#include<cstring>

using namespace std;

class Musician{
public:
~Musician(); //非仮想デストラクタ:多様クラスについては推奨されない
//・・・
};
Musician::~Musician() {cout<<musician being destroyed \n;}

class Trumpeter:public Musician{
public:
~Trumpeter(); //これも非仮想デストラクタ
}
Trumpeter::~Trumpeter() {cout<<trumpeter being destroyed \n;}

int main(){
Trumpeter *pt;
Musician *pm;

pt=new Trumpeter; //TrumpeterはTrumpeterへのポインタにより指されている
delete pt; //ok:まずtrumpeter being destroyedをプリント
//次にmusician being destroyedをプリント

pm=new Trumpeter; //TrumpeterはMusicianへのポインタにより指されている
delete pm; //問題:musician being destroyedだけをプリント
}
をコンパイルしましたが、
Trumpeter::~Trumpeter : デストラクタ には戻り値の型を指定できません。
というエラーが出ました。
授業でやった通りのことを写したんですができません。
どなたか教えてください。

Re:デストラクタ

Posted: 2010年7月24日(土) 21:04
by スキマ妖怪
ケアレスミスでしょうけど。

class Trumpeter:public Musician{
// ...
}

じゃなくて

class Trumpeter:public Musician{
// ...
} ;

Re:デストラクタ

Posted: 2010年7月24日(土) 21:07
by Poco
> 授業でやった通りのことを写したんですができません。

授業でエラーが出ていなかったのなら、写し間違いです。
パッと見、
> class Trumpeter:public Musician{
> public:
> ~Trumpeter(); //これも非仮想デストラクタ
> }

ここの最後にセミコロン(;)がありませんが、それが原因では?

#前の問題が解決したら、解決ボタン押しておきましょうね。

Re:デストラクタ

Posted: 2010年7月24日(土) 21:21
by 名無し
class Trumpeter:public Musician{
public:
~Trumpeter(); //これも非仮想デストラクタ
}

クラスの最後に;セミコロンがない。
最初はよくあることかもしれない。
クラスはヘッダーに宣言をするのをおすすめする。

あと、ここで聞くのもいいけど、C++の本を買って読むことを進めます。

Re:デストラクタ

Posted: 2010年7月24日(土) 21:37
by よつどもえ
ありがとうございます。

すいません、焦って見落としていました。

Re:デストラクタ

Posted: 2010年7月24日(土) 21:39
by よつどもえ
。。