【发布时间】:2013-03-13 17:14:39
【问题描述】:
我想从一个主窗口创建一个窗口,并向它发送一个指向我的主窗口的指针。我做了一次,我会再做一次,但是第二次,我总是在编译时出现这个错误“没有适当的默认构造函数可用”
主窗口:
#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
以及导致问题的窗口:
#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
}
标题
#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
如果我在 StonePriceWindow 的标头中有此“StonePriceWindow() {}”,则会出现以下错误:“指定了多个默认构造函数”并且始终显示“没有适当的等..”
感谢您的帮助,我不明白为什么。
【问题讨论】:
-
您能否真正提供 exact 编译错误及其发生所在的行,而不是大量使用代码。
-
stonepricewindow.cpp:7: erreur : C2512: 'Ui::StonePriceWindow' : 没有合适的默认构造函数可用,它位于这一行: StonePriceWindow::StonePriceWindow(CostSimulator *parent) : ui(new Ui::StonePriceWindow) { ui->setupUi(this); displayStonePriceList(父); }
-
对,所以有两个
StonePriceWindow类,一个在Ui命名空间中,这就是导致问题的原因。我建议查看 ui_stonepricewindow.h -
Ui::StonePriceWindow是由uic生成的,所以应该是正确的 - 它也应该仅有一个编译器创建的构造函数。您是否尝试过执行完全清理和重建? -
是的,我尝试右键单击并清理项目,但什么也没做...
标签: c++ qt window parent-child