条件if中类成员的作用域
Scope of class member within conditional if
在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(
相关文章:
- 在构造函数中输入对象时C++类成员作用域
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 缩短成员函数作用域说明符(嵌套类)(C++)
- 在没有显式作用域的情况下无法访问模板基类的静态成员
- 类的静态成员变量(受保护)的作用域
- 使用作用域内生成的指针初始化静态成员
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 类成员的 OpenCL 上下文作用域
- C++静态成员函数中静态变量的作用域
- 返回具有引用父作用域中变量的函数成员的结构
- 如何在类的作用域中定义函数,而不是将其定义为成员函数
- 将函子映射到失去作用域的成员函数
- 成员类作用域中的引用
- 条件if中类成员的作用域
- 使用作用域运算符访问非静态成员变量
- C++通过类作用域访问实例的成员
- 使用指向成员的指针时,如何通过作用域解析运算符获取类成员的地址
- 内部作用域枚举、哈希函数和无序集数据成员
- 分配函数作用域成员是否会导致内存泄漏