c++ - 候选人期望 6 个参数,提供 0 个参数
问题描述
我正在创建一个由 6 列组成的 QTableView,通过调用对话框插入特定值。当我编译项目时,我在文件“itemcameracalibrationdata.h”中收到以下错误:
注意:候选人期望 6 个参数,提供 0 个参数
注意:候选人需要 6 个参数,提供 1 个参数
为了完整起见,我将 6 个变量和对话框文件都包括在下面:在itemcalibrationdata.h 下方
#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
在项目calibrationdata.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();
}
作为最后一个文件cameracaldialog.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();
}
推荐阅读
- c# - NHibernate 以一对多关系创建 2 个字段
- mysql - TypeORM QueryRunner 选择不同的
- python - 任何 python 包来加速循环计算?
- reactjs - 无法读取未定义的属性
- javascript - 从正则表达式模式中删除 ips,js
- intellij-idea - IntelliJ IDEA - 没有导出 IDE 设置菜单项
- javascript - 保持元素滚动到底部
- java - 如何为 CompletableFuture 设置完成或失败?
- php - 如何从 CodeIgniter 中的自定义库加载模型以检查数据库中是否存在值?
- android-studio - Ninja CMAKE_MAKE_PROGRAM 的 ndk 构建错误未设置