【发布时间】: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