gpt4 book ai didi

c++ - 为什么这说没有来自 "nullptr_t to const"的已知转换?

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:17 29 4
gpt4 key购买 nike

最初该项目编译并运行良好。然后,在不修改 setuptab.h|.cpp 文件的情况下,我试图避免创建 setuptab 的新实例,所以我尝试将其传递过去。

错误

No matching constructor for initialization of 'Ps::MainView'
m_mainView(*new MainView(nullptr), m_setupTab)
^ ~~~~~~~

Candidate constructor (the implicit copy constructor) not viable: no known conversion from 'nullptr_t' to 'const Ps::MainView' for 1st argument
class MainView : public QMainWindow
^

这是一个小项目,我有以下文件:

main.cpp
startup.h|.cpp

View/mainview.h|.cpp
View/setuptab.h|.cpp

我的 main.cpp 很简单:

#include <QApplication>
#include "startup.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Ps::Startup start_up;
start_up.show();

return a.exec();
}

启动.cpp

#include "startup.h"
#include "View/mainview.h"
#include "View/setuptab.h"

namespace Ps
{
Startup::Startup() :
QObject(nullptr),
m_setupTab(*new SetupTab(nullptr)),
m_mainView(*new MainView(nullptr), m_setupTab) //THIS IS WHERE THE ERROR COMES FROM

{
}

void Startup::show() const{
m_mainView.show();

}
}

然后创建了以下头文件,如果你想要相应的.cpp,请告诉我。

启动.h:

#pragma once
#include <QObject>

namespace Ps{

class MainView;
class SetupTab;

class Startup final : public QObject
{
Q_OBJECT
public:
explicit Startup();
void show() const ;

private:
SetupTab& m_setupTab;
MainView& m_mainView;

explicit Startup(const Startup& rhs) = delete;
Startup& operator= (const Startup& rhs) = delete;
};
}

主视图.h

#ifndef MAINVIEW_H
#define MAINVIEW_H

#include <QMainWindow>

namespace Ui {
class MainView;
}

namespace Ps {

class SetupTab;

class MainView : public QMainWindow //corresponding candidate error
{
Q_OBJECT

public:
explicit MainView(QWidget *parent, Ps::SetupTab &setup);
~MainView();

private:
SetupTab& m_setupTab;
Ui::MainView *ui;
};
}

#endif // MAINVIEW_H

设置选项卡.h

#ifndef SETUPTAB_H
#define SETUPTAB_H

#include <QWidget>

namespace Ui {
class SetupTab;
}

namespace Ps {
class SetupTab : public QWidget
{
Q_OBJECT

public:
explicit SetupTab(QWidget *parent = 0);
~SetupTab();

private:
Ui::SetupTab *ui;
};
}

#endif // SETUPTAB_H

最佳答案

MainView 构造函数有两个参数:

explicit MainView(QWidget *parent, Ps::SetupTab &setup);

你只用一个调用它:

m_mainView(*new MainView(nullptr), m_setupTab)
^^^^^^^

看起来你只是把括号放在了错误的地方:

m_mainView(*new MainView(nullptr, m_setupTab))

给出错误消息是因为唯一具有单个参数的构造函数是隐式声明的复制构造函数,因此编译器建议将其作为最有可能的候选对象。

关于c++ - 为什么这说没有来自 "nullptr_t to const"的已知转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691120/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com