3

这是我的代码:

class X
{
public:
  X():_x(5){}

  void GetVal(int & oVal)
  {
    oVal = _x;
  }

 private:
  int _x;

};

class Y
{
public:
  X * const GetX()
  {
    return &_x;
  }
private:
  X _x;
};

int main()
{
  Y y;
  X * p = y.GetX();
  int * pInt = new int[2];
 p->GetVal(pInt[0]);
}

在 main 的最后一行,我得到一个错误

从 const 限定函数对成员的错误访问

仅当代码在 sun solaris 系统上编译时才会出现此错误,并且不会在 windows 或 aix 系统上发生。知道为什么吗?

最奇怪的是,如果我用一个简单的整数 (int a = 0; p->GetVal(a)) 替换 pInt[0],错误就消失了

4

1 回答 1

1

constin将X * const GetX()被忽略,因为函数调用的结果是右值,非类类型的右值不能const根据返回 const 指针的 c++ const 成员函数。但是返回的指针是什么类型的 const?.

你确定你不是故意写:

const X * GetX() const
{
  return &_x;
}

也就是说,将它从返回一个指向变量 date 的常量指针更改为一个指向常量数据的变量指针,并声明GetX()为一个常量成员函数,即可以在 Y 的常量实例上使用的成员函数:const Y y;

此外class X,您可以更改GetVal()

void GetVal(int & oVal) const
{
  oVal = _x;
}
于 2012-10-29T08:06:50.193 回答