c++ - 错误 : expected constructor, 析构函数,或源文件中用户定义类的 '&' token 之前的类型转换

标签 c++

我在使用独立程序复制的其中一个项目中遇到错误。我确实看到了几篇与此相关的帖子,但无法弄清楚我的问题。此代码出现以下错误:“错误:预期的构造函数、析构函数或类型转换在‘&’标记之前”

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

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

最佳答案

有两个问题。首先,您忘记限定类型名称 X_ptr:

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

其次,请注意您正在返回一个局部变量的引用。尝试取消引用 func1() 返回的值会给您未定义的行为。

只需以这种方式更改函数的原型(prototype):

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

关于c++ - 错误 : expected constructor, 析构函数,或源文件中用户定义类的 '&' token 之前的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789847/

相关文章:

c++ - 创建自己的线程的 native 共享库可以(应该吗?)支持退出 'without warning' 的使用进程?

c++ - NULL 保证为 0 吗?

c++ - 常量和 "dynamic"选项值的混合

c++ - OpenGL 渲染(仅实时)?

c++ - 是 “catch all” block ,它会动态分配分配的内存,然后重新抛出有效/良好的设计选择?

c++ - 你如何键入别名嵌套类?

c++ - 通过值可变捕获的 lambda 不适用于 const &?

c++ - C++中std::multiset::count的时间复杂度是多少?

c++ - Qt 和 C++ 类给我一个错误

c++ - 在 Visual Studio 2019 MSVC 中编译时出现编译错误 C2048,但在 clang++ 中可以正常工作吗?