候选人期望 6 个参数,提供 0 个
Candidate expects 6 arguments, 0 provided
我正在创建一个由 6 列组成的 QTableView,通过调用对话框插入特定值。当我编译项目时,我在文件"itemcameracalibrationdata.h"中收到以下错误:
注意:候选人期望 6 个参数,0 个提供
注意:候选人期望 6 个参数,提供 1 个参数
为了完整起见,我在下面包括了 6 个变量和对话框文件:在项目校准数据下方。
#ifndef ITEMCAMERACALIBRATIONDATA_H
#define ITEMCAMERACALIBRATIONDATA_H
#include <QObject>
#include <QString>
class itemCameraCalibrationData
{
public:
itemCameraCalibrationData(const QString &cameraName, const double fovx, const double fovy,
int version, const double focalLenghth,
const double reprojectionerror);
QString cameraName() const { return mCameraName;}
int version() const { return mVersion; }
double fovx() const { return mFovx; }
double fovy() const { return mFovy; }
double focalLenghth() const { return mFocalLenghth; }
double reprojectionerror() const { return mReprojectionError; }
private:
QString mCameraName;
int mVersion;
double mFovx;
double mFovy;
double mFocalLenghth;
double mReprojectionError;
};
#endif // ITEMCAMERACALIBRATIONDATA_H
在项目校准数据下方.cpp
#include "itemcameracalibrationdata.h"
itemCameraCalibrationData::itemCameraCalibrationData(const QString &cameraName, const double fovx, const double fovy,
int version, const double focalLenghth,
const double reprojectionerror)
{
mCameraName = cameraName;
mFovx = fovx;
mFovy = fovy;
mVersion = version;
mFocalLenghth = focalLenghth;
mReprojectionError = reprojectionerror;
}
然后看到cameracaldialog.cpp错误在这个文件中的行ui(new Ui::cameraCalDialog(
#include "cameracaldialog.h"
#include "ui_cameracaldialog.h"
#include "itemcameracalibrationdata.h"
#include <QFile>
#include <QMessageBox>
#include <QFileDialog>
#include <QCompleter>
#include <QFileSystemModel>
cameraCalDialog::cameraCalDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::cameraCalDialog)
{
ui->setupUi(this);
}
cameraCalDialog::~cameraCalDialog()
{
delete ui;
}
void cameraCalDialog::on_buttonBox_accepted()
{
mItemCamCal = itemCameraCalibrationData(ui->camName_lineEdit->text(),
ui->ver_lineEdit->text().toInt(),
ui->fovx_lineEdit->text().toDouble(),
ui->fovy_lineEdit->text().toDouble(),
ui->focal_lineEdit->text().toDouble(),
ui->rep_lineEdit->text().toDouble());
accept();
}
void cameraCalDialog::on_buttonBox_rejected()
{
rejected();
}
作为最后一个文件相机校准对话框.h
#ifndef CAMERACALDIALOG_H
#define CAMERACALDIALOG_H
#include <QDialog>
#include "itemcameracalibrationdata.h"
namespace Ui {
class cameraCalDialog;
}
class cameraCalDialog : public QDialog
{
Q_OBJECT
public:
explicit cameraCalDialog(QWidget *parent = nullptr);
~cameraCalDialog();
itemCameraCalibrationData itemCamCal() const { return mItemCamCal; }
private slots:
void on_buttonBox_accepted();
void on_buttonBox_rejected();
private:
Ui::cameraCalDialog *ui;
itemCameraCalibrationData mItemCamCal;
};
#endif // CAMERACALDIALOG_H
非常感谢您就此事提供的任何见解
当您使用时:
itemCameraCalibrationData mItemCamCal;
在 .h 中,您正在创建一个新对象,但类itemCameraCalibrationData
需要参数,因此它会抛出错误。
在您的情况下,您不想在 .h 中创建它,而是在插槽中创建它on_buttonBox_accepted
因此解决方案是在 .h 中声明一个指针并使用new
创建对象:
*.h
class cameraCalDialog : public QDialog
{
...
private:
Ui::cameraCalDialog *ui;
itemCameraCalibrationData *mItemCamCal;
};
*。.cpp
cameraCalDialog::~cameraCalDialog()
{
delete ui;
delete mItemCamCal;
}
void cameraCalDialog::on_buttonBox_accepted()
{
mItemCamCal = new itemCameraCalibrationData(ui->camName_lineEdit->text(),
ui->ver_lineEdit->text().toInt(),
ui->fovx_lineEdit->text().toDouble(),
ui->fovy_lineEdit->text().toDouble(),
ui->focal_lineEdit->text().toDouble(),
ui->rep_lineEdit->text().toDouble());
accept();
}
- 你需要一个默认的构造函数。
- 用
const
值参数污染接口是没有意义的。const
属于实现,是的,签名可以这样不同。语言是故意这样设计的。 - 使用初始值设定项列表。
// itemcameracalibrationdata.cpp
#pragma once
#include <QString>
class itemCameraCalibrationData {
public:
itemCameraCalibrationData() = default;
itemCameraCalibrationData(const QString &cameraName,
double fovx, double fovy,
int version, double focalLenghth,
double reprojectionerror);
QString cameraName() const { return mCameraName;}
int version() const { return mVersion; }
double fovx() const { return mFovx; }
double fovy() const { return mFovy; }
double focalLenghth() const { return mFocalLenghth; }
double reprojectionerror() const { return mReprojectionError; }
private:
QString mCameraName;
int mVersion = {};
double mFovx = {};
double mFovy = {};
double mFocalLenghth = {};
double mReprojectionError = {};
};
// itemcameracalibrationdata.cpp
#include "itemcameracalibrationdata.h"
itemCameraCalibrationData::itemCameraCalibrationData(
const QString &cameraName, const double fovx, const double fovy,
const int version, const double focalLenghth, const double reprojectionerror)
:
mCameraName(cameraName),
mFovx(fovx),
mFovy(fovy),
mVersion(version),
mFocalLenghth(focalLenghth),
mReprojectionError(reprojectionerror)
{}
相关文章:
- 何时提供默认参数作为模板参数
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 执行参数未提供预期结果
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 当为模板参数提供默认参数时,VS 2017无法正确找到以前定义的类型
- C++ 使用模板类指针作为模板参数,而不为其提供参数
- 无法为 QT 连接函数提供参数
- 必须在类成员函数的返回类型中提供更具体的类型,但不能提供参数类型
- 绑定函数而不提供参数类型
- 我可以像删除[3]一样提供参数来删除[]吗?
- 在没有提供参数的情况下,如何调用我的重载new
- 向函数提供参数时使用"<<"运算符
- c++强制数组声明而不提供参数
- 为bash中调用的程序提供参数的一种方法
- boost::spirit绑定函数,提供参数为spirit:qi::_val
- visual c++void*为函数提供参数
- c++:初始化没有匹配的构造函数/候选构造函数不可行:需要单个参数,但没有提供参数
- 在从QtProcess运行Linux二进制文件时提供参数
- Boost没有为参数color_output提供参数.Test和CTest