我第一次使用gcc(以前是msvc),现在我在我的类中返回对变量的引用时遇到了一些问题。这是代码:
class Foo
{
public:
const int& getMyVar() const
{
return mMyVar;
}
private:
int mMyVar;
};
如果存在比简单int更大的数据结构,我无法想象我必须返回副本而不是引用。
以下是编译错误:
错误:'int&'类型引用的初始化无效来自'int'类型的表达式
如果你能帮助我并告诉我如何解决我的问题,那将是很棒的。
答案 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;
}