我试图将一个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();
}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类对象时,我会得到以下错误:
'Plotter::Plotter(std::shared_ptr &,QObject *):无法将参数1从“_Ty”转换为“std::shared_ptr&”
我正在使用MicrosoftVisualStudioCommunity2019与Qt插件。我的C++版本是C++17。
发布于 2021-05-25 12:44:35
你使用std::make_unique是错误的。std::make_unique的参数被传递给构造函数,并在内部调用new。你应该使用std::make_unique<Plotter>(PD)
https://stackoverflow.com/questions/67686982
复制相似问题