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

有人可以帮我解决这个错误吗?

4

1 回答 1

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;
}
于 2013-05-28T10:34:44.633 回答