2013-05-28 35 views
1

我在使用獨立程序複製的其中一個項目中遇到錯誤。我確實看到了幾個與此相關的帖子,但無法弄清我的問題。我收到以下錯誤使用此代碼:「錯誤:預期的構造函數,析構函數或類型之前‘&’令牌轉換」錯誤:在源文件中用戶定義的類的'&'令牌之前的構造函數,析構函數或類型轉換

#include <iostream> 
#include <boost/shared_ptr.hpp> 

using namespace std; 

class X 
{ 
private: 
    int _x; 
public: 
    X(int x) : _x(x) {}; 
}; 

class Y 
{ 
private: 
    typedef boost::shared_ptr<X> X_ptr; 
public: 
    X_ptr& func1(); 
}; 

X_ptr& Y::func1() 
{ 
    X_ptr p(new X(8)); 
    return p; 
}; 

int main() 
{ 
    return 0; 
} 

能someon幫我解決這個問題?

回答

4

有兩個問題。首先,你忘了限定類型名稱X_ptr

Y::X_ptr& Y::func1() 
// ^^^ ^
//   BUT REMOVE THIS! 

其次,你是一個局部變量返回參考通知。嘗試解除引用func1()返回的值會導致未定義的行爲。

只要改變你的函數的原型是這樣的:

Y::X_ptr Y::func1() 
// ^^^^^ 
// Returning the smart pointer by value now 
{ 
    X_ptr p(new X(8)); 
    return p; 
} 
+0

@deepaktj:這是否回答你的問題? –

相關問題