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();行です。基準マークを外せばOKです。

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 に答える