gpt4 book ai didi

c++类前向声明​​和不完整类型的无效使用

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:58 25 4
gpt4 key购买 nike

当我在 QtCreator 上运行代码时,我得到:

08:23:56: Running steps for project dialog...
08:23:56: Configuration unchanged, skipping qmake step.
08:23:56: Starting: "/usr/bin/make" -w
make: Entering directory `/home/entel/program/c++/dialog-build-Desktop_Qt_5_0_1_GCC_32bit-Debug'
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.0.1/5.0.1/gcc/mkspecs/linux-g++ -I../dialog -I/opt/Qt5.0.1/5.0.1/gcc/include -I/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets -I/opt/Qt5.0.1/5.0.1/gcc/include/QtGui -I/opt/Qt5.0.1/5.0.1/gcc/include/QtCore -I. -I. -I. -o dialog.o ../dialog/dialog.cpp
../dialog/dialog.cpp: In constructor 'FindDialog::FindDialog(QWidget*)':
../dialog/dialog.cpp:5:40: error: invalid use of incomplete type 'class QLabel'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:9:7: error: forward declaration of 'class QLabel'
../dialog/dialog.cpp:6:20: error: invalid use of incomplete type 'class QLineEdit'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:10:7: error: forward declaration of 'class QLineEdit'
../dialog/dialog.cpp:7:10: error: invalid use of incomplete type 'class QLabel'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:9:7: error: forward declaration of 'class QLabel'
../dialog/dialog.cpp:9:47: error: invalid use of incomplete type 'class QCheckBox'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:8:7: error: forward declaration of 'class QCheckBox'
../dialog/dialog.cpp:10:60: error: invalid use of incomplete type 'class QCheckBox'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:8:7: error: forward declaration of 'class QCheckBox'
../dialog/dialog.cpp:12:45: error: invalid use of incomplete type 'class QPushButton'
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1:0,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:52:7: error: forward declaration of 'class QPushButton'
../dialog/dialog.cpp:13:15: error: invalid use of incomplete type 'class QPushButton'
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1:0,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:52:7: error: forward declaration of 'class QPushButton'
../dialog/dialog.cpp:14:15: error: invalid use of incomplete type 'class QPushButton'
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1:0,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:52:7: error: forward declaration of 'class QPushButton'
../dialog/dialog.cpp:16:46: error: invalid use of incomplete type 'class QPushButton'
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1:0,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:52:7: error: forward declaration of 'class QPushButton'
../dialog/dialog.cpp:17:103: error: no matching function for call to 'FindDialog::connect(QLineEdit*&, const char*, FindDialog* const, const char*)'
../dialog/dialog.cpp:17:103: note: candidates are:
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: no known conversion for argument 1 from 'QLineEdit*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: no known conversion for argument 1 from 'QLineEdit*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: QMetaObject::Connection QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: no known conversion for argument 1 from 'QLineEdit*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template argument deduction/substitution failed:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType) [with Func1 = const char*; Func2 = const char*]':
../dialog/dialog.cpp:17:103: required from here
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:17:103: note: candidate expects 3 arguments, 4 provided
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:17:103: note: candidate expects 3 arguments, 4 provided
../dialog/dialog.cpp:18:66: error: no matching function for call to 'FindDialog::connect(QPushButton*&, const char*, FindDialog* const, const char*)'
../dialog/dialog.cpp:18:66: note: candidates are:
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: QMetaObject::Connection QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template argument deduction/substitution failed:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType) [with Func1 = const char*; Func2 = const char*]':
../dialog/dialog.cpp:18:66: required from here
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:18:66: note: candidate expects 3 arguments, 4 provided
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:18:66: note: candidate expects 3 arguments, 4 provided
../dialog/dialog.cpp:19:61: error: no matching function for call to 'FindDialog::connect(QPushButton*&, const char*, FindDialog* const, const char*)'
../dialog/dialog.cpp:19:61: note: candidates are:
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:211:36: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:214:36: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: QMetaObject::Connection QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:430:32: note: no known conversion for argument 1 from 'QPushButton*' to 'const QObject*'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: note: template argument deduction/substitution failed:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType) [with Func1 = const char*; Func2 = const char*]':
../dialog/dialog.cpp:19:61: required from here
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:227:43: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:257:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:19:61: note: candidate expects 3 arguments, 4 provided
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qwidget.h:46:0,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:45,
from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func1>::Object*, Func1, Func2)
/opt/Qt5.0.1/5.0.1/gcc/include/QtCore/qobject.h:280:13: note: template argument deduction/substitution failed:
../dialog/dialog.cpp:19:61: note: candidate expects 3 arguments, 4 provided
../dialog/dialog.cpp:21:5: error: 'QHBoxLayout' was not declared in this scope
../dialog/dialog.cpp:21:18: error: 'topLeftLayout' was not declared in this scope
../dialog/dialog.cpp:21:38: error: expected type-specifier before 'QHBoxLayout'
../dialog/dialog.cpp:21:38: error: expected ';' before 'QHBoxLayout'
../dialog/dialog.cpp:25:5: error: 'QVBoxLayout' was not declared in this scope
../dialog/dialog.cpp:25:18: error: 'leftLayout' was not declared in this scope
../dialog/dialog.cpp:25:35: error: expected type-specifier before 'QBoxLayout'
../dialog/dialog.cpp:25:35: error: expected ';' before 'QBoxLayout'
../dialog/dialog.cpp:30:5: error: 'QVBoxLayoout' was not declared in this scope
../dialog/dialog.cpp:30:19: error: 'rightLayout' was not declared in this scope
../dialog/dialog.cpp:30:37: error: expected type-specifier before 'QVBoxLayout'
../dialog/dialog.cpp:30:37: error: expected ';' before 'QVBoxLayout'
../dialog/dialog.cpp:35:5: error: 'QHBoxLayoout' was not declared in this scope
../dialog/dialog.cpp:35:19: error: 'mainLayout' was not declared in this scope
../dialog/dialog.cpp:35:36: error: expected type-specifier before 'QHBoxLayout'
../dialog/dialog.cpp:35:36: error: expected ';' before 'QHBoxLayout'
../dialog/dialog.cpp: In member function 'void FindDialog::findClicked()':
../dialog/dialog.cpp:46:28: error: invalid use of incomplete type 'class QLineEdit'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:10:7: error: forward declaration of 'class QLineEdit'
../dialog/dialog.cpp:47:42: error: invalid use of incomplete type 'class QCheckBox'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:8:7: error: forward declaration of 'class QCheckBox'
../dialog/dialog.cpp:49:25: error: invalid use of incomplete type 'class QCheckBox'
In file included from ../dialog/dialog.cpp:1:0:
../dialog/dialog.h:8:7: error: forward declaration of 'class QCheckBox'
../dialog/dialog.cpp: In member function 'void FindDialog::enableFindButton(const QString&)':
../dialog/dialog.cpp:56:15: error: invalid use of incomplete type 'class QPushButton'
In file included from /opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/QDialog:1:0,
from ../dialog/dialog.h:4,
from ../dialog/dialog.cpp:1:
/opt/Qt5.0.1/5.0.1/gcc/include/QtWidgets/qdialog.h:52:7: error: forward declaration of 'class QPushButton'
../dialog/dialog.cpp:56:33: error: cannot convert 'QString::isEmpty' from type 'bool (QString::)()const' to type 'bool'
../dialog/dialog.cpp:56:33: error: in argument to unary !
make: *** [dialog.o] Error 1
make: Leaving directory `/home/entel/program/c++/dialog-build-Desktop_Qt_5_0_1_GCC_32bit-Debug'
08:23:57: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project dialog (kit: Desktop Qt 5.0.1 GCC 32bit)
When executing step 'Make'

我的部分代码:对话框.h

#ifndef FINDDIALOG_H
#define FINDDIALOG_H

#include <QDialog>
#include <QtGui>
#include <QWidget>

class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog(QWidget *parent = 0);
signals:
void findNext(const QString &str,Qt::CaseSensitivity cs);
void findPrevious(const QString &str,Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);
private:
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
};

#endif

对话框.cpp

#include "dialog.h"

FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{
label = new QLabel(tr("Find &what"));
lineEdit = new QLineEdit;
label->setBuddy(lineEdit);

caseCheckBox = QCheckBox(tr("Match &case"));
backwardCheckBox = new QCheckBox(tr("Search &backward"));

findButton = new QPushButton(tr("&Find"));
findButton->setDefault(true);
findButton->setEnable(false);

closeButton = new QPushButton(tr("close"));
connect(lineEdit,SIGNAL(textChanged(const Qstring &)),this,SLOT(enableFindButton(const QString &)));
connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));
connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));

QHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);

QVBoxLayout *leftLayout = new QBoxLayout;
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(backwardCheckBox);

QVBoxLayoout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(findButton);
rightLayout->addWidget(closeButton);
rightLayout->addStretch();

QHBoxLayoout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);

setWindowTitle(tr("Find"));
setFixedHeight(sizeHint().height());
}

void FindDialog::findClicked()
{
QString text = lineEdit->text();
Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive
: Qt::CaseInsensitive;
if (backwardCheckBox->isChecked())
emit findPrevious(text,cs);
else emit findNext(text,cs);
}

void FindDialog::enableFindButton(const QString &text)
{
findButton->setEnable(!text.isEmpty);
}

我不知道该怎么办。我搜索了解决方案,但没有找到与我的问题类似的任何内容。感谢您的帮助...

最佳答案

替换<QtGui>在 dialog.h 中 <QtWidgets>在包括

关于c++类前向声明​​和不完整类型的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com