-1

次のような C++ ヘッダー ファイルがあります。

class someClass : public someBaseClass
{
public:
    someClass();
    ~someClass();

private:
    Text playText; //declare text object
};

そのための C++ ソース ファイルは次のとおりです。

someClass::someClass() : playText("Play") //instantiate text object
{
}

someClass::~someClass()
{
}

次に、次の静的メンバーを持つ別のクラスがありますsomeClass

class anotherClass
{
public:
    anotherClass();
    ~anotherClass();
private:
    static someClass className; //declare someClass object
};

対応する C++ ソース ファイル:

anotherClass::anotherClass()
{
}

anotherClass::~anotherClass()
{
}

someClass anotherClass::className; //must do because its static

私の問題は、アプリケーションを閉じると、次のようなエラー メッセージが表示されることです。

Unhandled exception at 0x6903a9e0 in Breakout.exe: 0xC0000005: Access violation reading location 0x00000054.

しかし、奇妙なこと: playText("Play")に、 someClass コンストラクターのコードの一部をコメントアウトすると、メッセージが消えます。基本的にインスタンス化できないplayTextか、エラーが発生します(これは、実行時にアプリケーションを閉じたときにのみ発生します)。

私は完全に混乱していて、なぜこれが起こるのかについて何も見つけることができないので、誰がなぜこれが起こるのか、どうすれば修正できるのか知っていますか?

ありがとう。

4

1 に答える 1

0

classは予約済みキーワードです。ここでは識別子として使用できません。

static someClass class;

静的メンバー変数には別の名前を使用する必要があります。これでもコンパイルできることに驚いています。

于 2012-12-08T00:32:00.013 に答える