返回对属性的引用(GCC)

时间:2013-07-15 06:28:05

标签: c++ gcc reference

我第一次使用gcc(以前是msvc),现在我在我的类中返回对变量的引用时遇到了一些问题。这是代码:

class Foo
{
public:

  const int& getMyVar() const
  {
      return mMyVar;
  }

private:
  int mMyVar;
};

如果存在比简单int更大的数据结构,我无法想象我必须返回副本而不是引用。

以下是编译错误

  

错误:'int&'类型引用的初始化无效来自'int'类型的表达式

如果你能帮助我并告诉我如何解决我的问题,那将是很棒的。

2 个答案:

答案 0 :(得分:2)

鉴于以下代码,它是您的类的一个小变体(添加了构造函数;在课后添加了分号)和一个简单的main(),我得到了编译错误:

z1.cpp: In function ‘int main()’:
z1.cpp:19:26: error: invalid initialization of reference of type ‘int&’ from expression of type  ‘const int’

第19行是const int &v2 = f.getMyVar();行。删除参考标记,没关系。

class Foo
{
public:

  Foo(int n = 0) : mMyVar(n) {}
  const int& getMyVar() const
  {
      return mMyVar;
  }

private:
  int mMyVar;
};

int main()
{
    Foo f;
    int  v1 = f.getMyVar(); // Copies result
    int &v2 = f.getMyVar(); // Error: must be const
    const int &v3 = f.getMyVar(); // OK as long as there's a default constructor
    return v1 + v2 + v3;
}

答案 1 :(得分:0)

它也将在没有构造函数初始化的情况下进行编译。

#include<iostream>
using namespace std;

class Foo
{
  int mMyVar;

public:

  const int& getMyVar() const{return mMyVar;}
};

int main()
{
  Foo foo;
  int a = foo.getMyVar();
  const int &b = foo.getMyVar();
  cout<<"My Var a is: "<< a<<endl;
  cout<<"My Var b is: "<< b;
  cin.get();
  return 0;   
}