2012-12-08 27 views
-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,否则我得到一个错误(只有当我在运行期间从不关闭应用程序时)。

我完全困惑,无法找到为什么发生这种情况的任何事情,所以没有人知道为什么发生这种情况,我该如何解决它?

谢谢。

+1

'class'是一个**关键字**。将该成员重命名为其他内容。 – StoryTeller

+0

除了'class'是一个关键字这个明显的问题(这里使用的可能仅仅是为了演示目的吗?),我一眼就看不到严重的问题。我认为,问题来自真正构造函数中的一些细节,可能是'someBaseClass'之一?请注意,静态初始化在输入'main()'之前运行,并且不确定初始化不同静态对象的顺序。所以,如果你有多个这样的对象,并且他们甚至互相引用,请注意... –

+0

请寄出'Text'类的代码。 –

回答

0

class是保留关键字。你不能把它作为这里的标识符:

static someClass class; 

你必须使用另一个名称为您的静态成员变量。我很惊讶,这甚至编译。

+0

其实,这不是问题。我只是将这个名称用于演示目的,因为它是我头上的第一个名字。 – ProgrammerGuy123

+0

@ ProgrammerGuy123然后你发布的代码是正确的。如果出现错误,那肯定不是该代码的一部分。 –

相关问题