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
和在单独线程中运行的Plotter
class访问。
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)
我试图将 std::shared_ptr
传递给 class 的构造函数,但出现错误。
我在单独文件的命名空间中定义了一个结构 PlotterData
:
namespace PWN
{
struct PlotterData
{
QMutex taskLock;
QQueue<PlotterTask> taskQ;
};
}
这个结构被在主线程中运行的mainclassPlotWidget
和在单独线程中运行的Plotter
class访问。
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)