2013-07-15 82 views
0

我第一次使用gcc(以前是msvc),現在我在返回對我的類中的變量的引用時遇到了一些問題。這裏是代碼:返回對屬性的引用(GCC)

class Foo 
{ 
public: 

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

private: 
    int mMyVar; 
}; 

如果有一個更大的數據結構不是一個簡單的INT,我不能想象我必須返回,而不是引用的副本。

以下是編譯錯誤

error: invalid initialization of reference of type 'int&' from expression of type 'int'

這將是巨大的,如果你能幫助我,告訴我我該怎麼解決我的問題。

+6

當我一個分號添加到末尾和編譯的問題與GCC 4.7.1在Mac OS X 10.8.4所示的類代碼,我得到'G ++ -Wall -Wextra -O3沒有錯誤 - c z1.cpp'。你添加了哪些額外的代碼來解決問題?你使用的是哪個版本的GCC?你還在使用Windows嗎? –

+0

你有沒有做類似'blahblah = myfoo.getMyVar();'?如果是這樣,你代碼中的'blahblah'是什麼? –

+3

當你需要'const int&b = foo.getMyVar()'時,我認爲你正在做'int&b = foo.getMyVar()'。 – perreal

回答

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; 
} 
+0

在任何行都沒有'const int&v2 = f.getMyVar();'。 – user1810087

+0

好吧,我想我需要像你一樣添加初始化。謝謝! – Cakasim

+0

構造函數是爲了我的理智;沒有構造函數,我得到了相同的編譯錯誤(給出或取出行號)。 –

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; 
}