2011-11-03 82 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的函数,删除()。

相关问题