条件if中类成员的作用域

Scope of class member within conditional if

本文关键字:作用域 成员 if 条件      更新时间:2023-10-16

在C++中,我创建了一个具有受保护(数据类型)成员和私有(函数)成员的类:

class Qt3DViewer : public QMainWindow
{
 ...
 protected:
    vtkImageData * imgC1;
 ...
 private:
    void ComputeSlices();
}

在类成员"ComputeSlices"的实现中,我使用条件if来更新imgC1:

void Qt3DViewer::ComputeObliqueSlices()
{
 ...
 if (someFlag==1)
     this->imgC1 = reader1->GetOutput();
 else
     this->imgC1 = reader2->GetOutput();
 ...
 // Code that requires this->imgC1 updated!
}

问题是,在if块更新超出范围并且imgC1成员NOT真正更新之后,imgC1的更新仅在条件内有效!

如何使用条件块更新imgC1,并确保在块之后实际更新成员?

除非,否则您显示的代码是有效的

reader1->GetOutput(); 

返回指向本地对象的指针,这将导致未定义的行为&可能会表现出你所经历的行为。

类似于:

vtkImageData *GetOutput()
{
    vtkImageData obj;
    //....
    //....
    //....
    vtkImageData* ptr = &obj;
    //....
    //....
    //....
    return ptr;
}

请注意,所有类成员,无论其访问规范如何,都可以在该类的成员函数中访问
因此,除非你的代码中潜伏着一个未定义的行为,否则this->imgC1总是可以访问的,并且应该按照你使用它的方式在成员函数中更新。

可能是reader1->GetOutput()出了问题,例如,在所有GetOutput(