2011-11-03 50 views
0

承擔第二,我們有boost :: shared_ptr默認構造會導致成員函數消失?

#include <boost/shared_ptr.hpp> 
#include <iostream> 
int main() 
{ 
    boost::shared_ptr<int> bleah(); //default constructor 
    cout << bleah.get() << endl; //error line 

    boost::shared_ptr<int> barf(new int (10)); 
    cout << *barf.get() << endl; //outputs 10 as normal. 


} 

如何走到這一步不能編譯? 就好像函數shared_ptr :: get突然從變量「bleah」的類定義中消失了一樣。 我確定有一個原因,但目前我看不到它。

+2

搜索:傷腦筋解析 – Nim

回答

3

這在C++中被稱爲Most vexing Parse

有了這個說法:

boost::shared_ptr<int> bleah(); //default constructor 

你聲明的函數取零個論點,即返回與名稱bleah一個shared_ptr。

要創建一個對象,將其更改爲:

boost::shared_ptr<int> bleah; 
+0

啊。你是正確的先生(s)。感謝您的澄清,包括Als和Ylisar。 – sbrett

7

第一個不是shared_ptr,它是一個以零參數返回名稱爲bleah的shared_ptr的函數,刪除()。

相關問題