Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有合适的默认构造函数可用,但已声明构造函数_C++_Qt_Window_Parent Child - Fatal编程技术网

C++ 没有合适的默认构造函数可用,但已声明构造函数

C++ 没有合适的默认构造函数可用,但已声明构造函数,c++,qt,window,parent-child,C++,Qt,Window,Parent Child,我想从主窗口创建一个窗口,并向它发送指向我的主窗口的指针。我做过一次,我还会再做一次,但是第二次,我在编译时总是出现这样的错误“没有合适的默认构造函数可用” 主窗口: #include "costsimulator.h" #include "ui_costsimulator.h" #include "stonepricewindow.h" CostSimulator::CostSimulator(AionEnhancingSimulator *parent) : ui(new Ui::Cos

我想从主窗口创建一个窗口,并向它发送指向我的主窗口的指针。我做过一次,我还会再做一次,但是第二次,我在编译时总是出现这样的错误“没有合适的默认构造函数可用”

主窗口:

#include "costsimulator.h"
#include "ui_costsimulator.h"

#include "stonepricewindow.h"

CostSimulator::CostSimulator(AionEnhancingSimulator *parent) : ui(new Ui::CostSimulator)
{
ui->setupUi(this);

parentPtr = parent;
stonePrice = createStonePrice();
connect(ui->aionEnhancingSimulator, SIGNAL(clicked()), this, SLOT(showAionEnhancingSimulatorWindow()));
connect(ui->stonePriceButton, SIGNAL(clicked()), this, SLOT(showStonePriceWindow()));
}

CostSimulator::~CostSimulator()
{
delete ui;
}

void CostSimulator::showAionEnhancingSimulatorWindow()
{
this->hide();
parentPtr->show();
}

QStringList *createStonePrice()
{
QStringList *tmp = new QStringList();

tmp->push_back(QString("80-30000000"));
return (tmp);
}

void CostSimulator::showStonePriceWindow()
{
StonePriceWindow *stonepricewindow = new StonePriceWindow(this);
stonepricewindow->show();
}

QStringList *CostSimulator::getStonePrice()
{
return (stonePrice);
}
和标题:

#ifndef COSTSIMULATOR_H
#define COSTSIMULATOR_H

#include <QDialog>

#include "aionenhancingsimulator.h"

namespace Ui {
class CostSimulator;
}

class CostSimulator : public QDialog
{
Q_OBJECT

public:
AionEnhancingSimulator *parentPtr;
explicit CostSimulator(AionEnhancingSimulator *parent);
~CostSimulator();

QStringList *stonePrice;

QStringList *createStonePrice();
QStringList *getStonePrice();
void showStonePriceWindow();

public slots:
void showAionEnhancingSimulatorWindow();

private:
Ui::CostSimulator *ui;
};

#endif // COSTSIMULATOR_H
#如果没有成本模拟器#
#定义成本模拟器
#包括
#包括“aionenhancingsimulator.h”
名称空间用户界面{
类仿真器;
}
类:公共QDialog
{
Q_对象
公众:
AionEnhancingSimulator*parentPtr;
显式协同模拟器(AionEnhancingSimulator*父级);
~CostSimulator();
QStringList*stonePrice;
QStringList*createStonePrice();
QStringList*getStonePrice();
void showtonepricewindow();
公众时段:
void showaionhancingsimulatorwindow();
私人:
Ui::CostSimulator*Ui;
};
#endif//COSTSIMULATOR\u H
以及导致问题的窗口:

#include "stonepricewindow.h"
#include "ui_stonepricewindow.h"
#include <QStringListModel>
#include <QStandardItemModel>
#include <QtGui>

StonePriceWindow::StonePriceWindow(CostSimulator *parent) : ui(new Ui::StonePriceWindow)
{
ui->setupUi(this);
displayStonePriceList(parent);
}

StonePriceWindow::~StonePriceWindow()
{
delete ui;
}

void StonePriceWindow::displayStonePriceList(CostSimulator *parent)
{
// To do
}
#包括“stonepricewindow.h”
#包括“ui_stonepricewindow.h”
#包括
#包括
#包括
StonePriceWindow::StonePriceWindow(CostSimulator*父级):ui(新ui::StonePriceWindow)
{
用户界面->设置用户界面(此);
显示价格表(父级);
}
StonePriceWindow::~StonePriceWindow()
{
删除用户界面;
}
作废StonePriceWindow::displayStonePriceList(CostSimulator*父级)
{
//做
}
标题

#ifndef STONEPRICEWINDOW_H
#define STONEPRICEWINDOW_H

#include <QDialog>

#include "costsimulator.h"

namespace Ui {
class StonePriceWindow;
}

class StonePriceWindow : public QDialog
{
Q_OBJECT

public:
explicit StonePriceWindow(CostSimulator *parent = 0);
~StonePriceWindow();

void displayStonePriceList(CostSimulator *parent);

private:
Ui::StonePriceWindow *ui;
};

#endif // STONEPRICEWINDOW_H
\ifndef stoneprice window\u H
#定义价格窗口
#包括
#包括“costsimulator.h”
名称空间用户界面{
类窗口;
}
类:公共QDialog
{
Q_对象
公众:
显式StonePriceWindow(CostSimulator*parent=0);
~StonePriceWindow();
作废价格表(成本模拟器*母公司);
私人:
Ui::StonePriceWindow*Ui;
};
#endif//stoneprice窗口
如果我在StonePriceWindow的头中有这个“StonePriceWindow(){}”,我会出现以下错误:“指定了多个默认构造函数”,并且总是“没有适当的etc…”


感谢您的帮助,我不明白为什么。

尝试添加StonePriceWindow(){}并删除另一个构造函数的默认参数。

当您编写如下代码时

StonePriceWindow x;
编译器如何知道是调用无参数构造函数,还是调用另一个具有
父级的默认值的构造函数

您需要删除另一个,或者从中删除默认值。

我发现了问题。
在StonePrinceWindow.ui中,有一个过时的ui名称,因此自动生成的ui_stoneprice窗口保留了这个过时的名称(即使在清理之后),编译器也永远找不到ctor。

抱歉,但我无法对最佳答案添加注释

我也有类似的问题,我创建的代码的类名和Qt.ui文件中对话框的objectName属性值之间似乎不匹配


我在QtDesigner中打开了.ui文件,并将objectName属性值更改为我在代码中使用的类名。之后编译进行得很顺利。

解决方案是更改字符串

#ifndef COSTSIMULATOR_H
#define COSTSIMULATOR_H
在costsimulator.h和ui_costsimulator.h文件中


Qt在自动生成的ui_costsimulator.h

中放置相同的
#ifndef#define
表达式,而不是用代码淹没人们,你能提供准确的编译错误和它发生在.stonepricewindow.cpp:7:erreur:C2512:“Ui::stonepricewindow”:没有合适的默认构造函数可用,它在这一行:stonepricewindow::stonepricewindow(CostSimulator*parent):Ui(新Ui::stonepricewindow){Ui->setupUi(this);displayStonePriceList(父母);}是的,所以有两个
StonePriceWindow
类,一个在
Ui
命名空间中,这就是导致问题的原因。我建议查看Ui_StonePriceWindow。h
Ui::StonePriceWindow
是由
uic
生成的,因此应该是正确的-它还应该只有一个编译器创建的构造函数。你有没有您尝试过执行完全清理和重建?是的,我尝试过右键单击并清理项目,但没有做任何操作…在提供的代码中写入了哪些内容?并且
StonePriceWindow
类没有无参数构造函数。这不在代码中写入,但编译器需要使用函数相等。
StonePriceWindow
没有无参数的构造函数,所以他添加了一个-参见问题的最后一句:“如果我在标题中有这个'StonePriceWindow(){}'”
newui::StonePriceWindow
调用的
StonePriceWindow
ctor实现在功能上与
StonePriceWindow x
相同。我了解发生了什么,但OP显然不了解,因此提供了一个与问题中的代码不明显相关的相当神秘的答案-对任何人都没有帮助。编辑你r请回答清楚为什么OP会从发布的代码中得到这个错误,我会投票给你。我给我的ctor打电话的唯一时刻是
StonePriceWindow*StonePriceWindow=new StonePriceWindow(this);
如果我添加
StonePriceWindow(){}
在标题中并删除实际ctor的默认值时,我有相同的错误。感谢您的帮助。但存在完全相同的问题`public:StonePriceWindow(){}StonePriceWindow(CostSimulator*parent);~StonePriceWindow()。