如何解决C2664:无法将“_Ty”转换为“std::shared_ptr”
我试图将 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。
解决方法
您使用了错误的 std::make_unique
。 std::make_unique
的参数传递给构造函数并在内部调用 new。您应该使用 std::make_unique<Plotter>(PD)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。