C2664:无法将“_Ty”转换为 'std::shared_ptr'

C2664: Cannot convert '_Ty' to 'std::shared_ptr'

我试图将 std::shared_ptr 传递给 class 的构造函数,但出现错误。

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

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

这个结构被在主线程中运行的mainclassPlotWidget和在单独线程中运行的Plotterclass访问。

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

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

plotter.cpp

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

当我尝试创建新的 Plotter class 对象时,出现错误:

Severity Code Description Project File Line Suppression State Error C2664 'Plotter::Plotter(std::shared_ptr<PWN::PlotterData> &,QObject *)': cannot convert argument 1 from '_Ty' to 'std::shared_ptr<PWN::PlotterData> &'

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

您使用的 std::make_unique 有误。 std::make_unique 的参数被传递给构造函数并在内部调用 new。你应该使用 std::make_unique<Plotter>(PD)