0

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

class Foo
{
public:

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

private:
  int mMyVar;
};

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

这是编译错误

错误:从“int”类型的表达式中对“int&”类型的引用进行无效初始化

如果您能帮助我并向我展示如何解决我的问题,那就太好了。

4

2 回答 2

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;
}
于 2013-07-15T06:43:01.127 回答
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;   
}
于 2013-07-15T07:05:50.617 回答