编译c ++代码时sun os上的“const访问错误”

时间:2012-10-29 07:41:28

标签: c++ unix compiler-errors solaris

这是我的代码:

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系统上发生。知道为什么吗?

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

1 个答案:

答案 0 :(得分:1)

const中的X * const GetX()将被忽略,因为函数调用的结果是rvalue,根据c++ const member function that returns a const pointer.. But what type of const is the returned pointer?,非类型的rvalues不能是const

你确定你不想写:

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

也就是说,你将它从将变量指针返回到变量指针变为常量数据,并将GetX()声明为常量成员函数,即可以在Y的常量实例:const Y y;

此外,在class X中,您可以将GetVal()更改为

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