【发布时间】:2014-06-12 13:31:40
【问题描述】:
我有以下问题,我不知道为什么这不起作用。编译器不会产生任何错误,但是当我执行代码时,它会崩溃。
我有一个基类 Message 和一个派生类 MessageA。
class Message{
protected:
Message(){}
public:
virtual ~Message(){}
virtual void setType(int type) = 0;
virtual int getType() = 0;
protected:
int type;
};
class MessageA : public Message
{
public:
MessageA(const uint32_t cid);
MessageA();
~CanMessage();
void setCID(const uint32_t cid);
void setType(int type);
int getType();
uint32_t getCID();
private:
uint32_t cid;
};
为了灵活,我将提供哪种消息作为函数的参数接收我选择的参数类型 Message* 消息。
bool ReceiveSingle(Message* message)
{
message = new MessageA(0x53);
return true;
}
该函数在另一个函数中调用,该函数应该对返回的指针执行操作:
Message* temp_message; //Global variable
/*
....
*/
ReceiveSingle(temp_message)
{
MessageA* temp = static_cast<MessageA*>(temp_message);
int cid = temp->getCID(); // This operation does not work !!!!!
}
所以我想保持ReceiveSingle 的参数灵活并选择基类类型Message*。该函数本身创建一个派生对象指针,并应通过全局基础对象指针temp_message* 返回它。稍后应该可以访问派生对象的变量。静态演员有效,但是当我执行getCID() te 程序崩溃。我找不到任何解决此错误的方法。
如果有人可以帮助我,那就太好了!
非常感谢!!
【问题讨论】:
-
我不确定您的
ReceiveSingle函数的语法是否正确。您没有返回类型,也没有为 temp_message 指定类型(这将覆盖全局 temp_message 变量)...根据您的编译器,它们可能分别默认为 void 和 int。 -
@Majenko 提示:那是一个函数调用。
-
是吗?它看起来不像我的函数调用。终结点在哪里; ...?为什么后面有 { 和 }?为什么和全局变量定义在同一个作用域?
-
@Majenko 我很确定它应该是(考虑到声明就在上面)。
{和}用于声明嵌套范围块。 -
很抱歉 { 和 } 错了,在 ReceiveSingle(temp_message) 之后应该是 ;
标签: c++ pointers inheritance