【问题标题】:How to change class member value by pointer如何通过指针更改类成员值
【发布时间】:2018-06-12 23:46:43
【问题描述】:

这个函数是一个名为 ClipInterface 的类的一部分,它提供了一个 GUI 从给定的 Clip 对象中编辑一些成员值。

为了完成这一点,我正在使用这个接收 Clip 对象的函数 通过指针,然后它访问它的一些成员来修改它们如下:

void ClipInterface::update(Clip* _clip){
//p_clip is a pointer declared in the .h file so it can 
//work across the whole class

    p_clip = _clip;

    for (int i = 0; i < p_clip -> stepSequence.size(); ++i){
        stepToggles[i] -> active = p_clip -> stepSequence[i];        
    }

    for (int i = 0; i < p_clip -> stepSequence.size(); ++i){
        *p_clip -> stepSequence[i] = stepToggles[i] -> active;
    }
}

通过使用前面的表达式,程序可以编译,但是当我尝试运行它时它给了我一个分段错误错误。

问题是:

  • 如何通过指针修改类成员值?我试过什么是 在这里,但我遇到了分段错误。

  • 这个表达式中的什么导致了分段错误?

提前致谢。

【问题讨论】:

  • 回想一下,-&gt; 的作用是取消对指针的引用。
  • *p_clip-&gt;stepSequence[i] 应该是 p_clip-&gt;stepSequence[i](不是 *)。您也可以考虑将 2 个循环合并为 1 个循环。

标签: c++ class pointers class-members


【解决方案1】:
*p_clip -> stepSequence[i] = stepToggles[i] -> active;

这里的p_clip已经是你应该使用的指针了;

p_clip -> stepSequence[i] = stepToggles[i] -> active;

要通过指针访问结构的成员,请使用箭头运算符。

【讨论】:

    【解决方案2】:

    你可以使用其中任何一种

    (*p_clip).stepSequences[i] = stepToggle
    

    首先取消引用指针以获取对象,然后获取成员

    或者使用等价的箭头操作符,效果一样

    p_clip->stepSequences[i] = stepToggle
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多