【问题标题】:C2664: Cannot convert '_Ty' to 'std::shared_ptr'C2664:无法将“_Ty”转换为“std::shared_ptr”
【发布时间】:2023-03-24 13:51:01
【问题描述】:

我正在尝试将 std::shared_ptr 传递给类的构造函数,但出现错误。

我在一个单独文件的命名空间中定义了一个结构 PlotterData:

namespace PWN
{
    struct PlotterData
    {
        QMutex taskLock;
        QQueue<PlotterTask> taskQ;
    };
}

这个结构由运行在主线程中的主类PlotWidget和运行在单独线程中的Plotter类访问。

plotwidget.h

...
std::shared_ptr<PWN::DS::PlotterData> PD;
std::vector<std::unique_ptr<Plotter>> plotters;

plotwidget.cpp

...
void PlotWidget::addNewPlotter()
{
    plotters.emplace_back(std::make_unique<Plotter>(new Plotter(PD)));
    plotters.back()->start();
}

绘图仪.h

class Plotter : public QThread
{
    Q_OBJECT

public:
    Plotter(std::shared_ptr<PWN::PlotterData>& pd, QObject *parent = nullptr);
    ~Plotter();

private:
    std::shared_ptr<PWN::DS::PlotterData> PD;
};

绘图仪.cpp

Plotter::Plotter(std::shared_ptr<PWN::PlotterData>& pd, QObject *parent)
    : PD(pd), QThread (parent)
{
}

当我尝试创建一个新的 Plotter 类对象时,我得到了错误:

严重性代码描述项目文件行抑制状态 错误 C2664 'Plotter::Plotter(std::shared_ptr<:plotterdata> &,QObject *)':无法将参数 1 从 '_Ty' 转换为 'std::shared_ptr<:plotterdata> &'

我正在使用带有 Qt 插件的 Microsoft Visual Studio Community 2019。我的 C++ 版本是 C++17。

【问题讨论】:

    标签: multithreading qt c++17 visual-studio-2019 smart-pointers


    【解决方案1】:

    您使用 std::make_unique 错误。 std::make_unique 的参数被传递给构造函数并在内部调用 new。你应该使用std::make_unique&lt;Plotter&gt;(PD)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多