【问题标题】:build issue on Qt/C++ [duplicate]在 Qt/C++ 上构建问题 [重复]
【发布时间】:2015-05-14 17:10:14
【问题描述】:

我目前在课堂上遇到了一个构建问题。开发是在 Qt/c++ 中完成的

header.h

class Ui_DialogBoxProgress : public QDialog
{
    Q_OBJECT

public:
    explicit Ui_DialogBoxProgress(QWidget *parent = 0, Cache& cache);
    ~Ui_DialogBoxProgress();
    Cache& m_cache;

src.cpp

Ui_DialogBoxProgress::Ui_DialogBoxProgress(QWidget *parent, Cache& cache) :
    QDialog(parent),
    m_cache(cache),
    ui(new Ui::Ui_DialogBoxProgress)
{
    ui->setupUi(this);
    ...

目前的错误是:

header.h:21: error: missing default argument on parameter 'cache'
    explicit Ui_DialogBoxProgress(QWidget *parent = 0, Cache& cache);

调用在 main.cpp 中完成,如下所示:

DeleteProgress = new Ui_DialogBoxProgress(*this, *cache);
                                                          ^

缓存是一个定义如下的类:

class Cache
{
public:
    Cache();
..

有什么想法吗?我已经用过这种方法,但是构建从不抱怨

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    一旦为函数参数定义了默认值,之后的每个参数也需要一个默认参数。这是 C++ 规则,而不仅仅是 Qt。在您的情况下,这实际上很困难,因为您通过非常量引用获取第二个参数。您可以切换函数参数的顺序,还是需要重构大量代码?您也可以通过指针而不是引用来获取Cache;那么您可以为该参数设置默认参数nullptr

    This SO thread 有一个不错的解决方案,您可能想看看。

    【讨论】:

    • 缓存是一个定义的类:
    • 感谢卡尔顿,它有效,只是需要切换顺序。我不认为订单可能会影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多