【问题标题】:Why can't I set a value inside of this class?为什么我不能在这个类中设置一个值?
【发布时间】:2013-12-12 17:18:43
【问题描述】:

我有一堂课:

class SendData
{
public:
    SendData(int SendAMsg(int foo, unsigned char *bar, int length), int number)
    {
        m_nDefinePos = 0;
        m_nOtherStuffDefinedAs =0;
    }
    void somestuffhere();
    void ClearDefinition();
private:
    int aLotOfVariableshere;
    int m_nDefinePos;
};

这是类本身。然后调用了一些东西:

SendData* m_pData;
m_pData->ClearDefinition();

现在叫这个:

void SendData::ClearDefinition()
{
    printf("Welcome to Clear Definition Script\n");
    m_nDefinePos = 0;
    // Some more stuff here
}

这里的代码以某种方式中断。我在控制台中收到“欢迎使用 Clear Definition Script”消息,但仅此而已。 它在m_nDefinePos = 0; 上中断。 (我确实在它之后输入了另一个printf 命令,从未在控制台中显示。)

我只是不知道为什么它在那里中断并且我找不到任何错误。

【问题讨论】:

  • 1) 代码中断是什么意思。您是否得到意外结果、编译器错误或运行时异常? 2)很难说出您提供的代码很少会出现什么问题。尝试多发一点。
  • 哦,是的,对不起,我忘了说:它编译得很好,然后程序运行到这个确切的位置会溢出“欢迎使用 ClearDefinition 脚本”,然后弹出错误消息....exe is not working当我点击调试按钮时:“0x0000005:访问冲突”
  • 欢迎来到 SO。如果您的问题得到解决,请稍等片刻并通过点击旁边的复选标记来接受答案。
  • @Zett,请不要在您的标题中添加[Solved]。如果您的问题得到解决,请接受一个答案,无论是您自己的还是其他人的。
  • 嗨,欢迎来到 SO。我从您的问题中删除了所有内容。没有人真的需要知道这一切。尽量简洁明了。提供错误消息或清楚地说明“此处中断”的含义。不要添加 [已解决] 或类似内容。点击解决您问题的答案上的绿色复选标记。

标签: c++ class pointers void


【解决方案1】:
SendData* m_pData;
m_pData->ClearDefinition();

这声明了一个指针,但没有创建对象或初始化指针指向任何东西,所以通过指针调用成员函数会出错。也许你想创建一个对象:

SendData data(arguments);
data.ClearDefinition();

或者您可能想初始化指针以指向一个已经存在的对象:

SendData* m_pData = whatever;

【讨论】:

  • 还值得一提的是在堆上分配SomeDataSomeData* m_pData = new SomeData;
  • @Raxvan:不,使用原始指针来管理动态资源是个坏主意,关于如何正确处理动态资源的讲座超出了这个问题的范围。
猜你喜欢
  • 2011-07-02
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多