#c #qt
#c #qt
Вопрос:
Я изучаю C с помощью Qt. Я установил Qt 5.15 и использую VS2019. У меня есть приведенный ниже код (в соответствии с примером в учебнике, над которым я работаю):
#include <QtGui>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTextStream cout(stdout);
//declarations of variables
int answer = 0;
do{
//local variables
int factArg = 0;
int fact(1);
factArg = QInputDialog::getInt(0, "Factorial Calculator", "Factorial of:", 1);
cout << "User entered: " << factArg << endl;
int i = 2;
while (i <= factArg) {
fact = fact * i;
i;
}
QString response = QString("The factorial of %1 is %2.n%3").arg(factArg).arg(fact).arg("Do you want to compute another factorial?");
answer = QMessageBox::question(0, "Play again?", response, QMessageBox::Yes | QMessageBox::No);
} while (answer == QMessageBox::Yes);
return EXIT_SUCCESS;
}
Тем не менее, я получаю приведенную ниже ошибку при создании экземпляра QApplication
as app
:
Incomplete Type is not Allowed
Я также получаю приведенную ниже ошибку для QInputDialog
QMessageBox
классов and:
name followed by '::' must be a class or namespace name
Я не уверен, почему это происходит — предположительно, что-то с пространством имен, но я не уверен, какую область предоставить. Я искал в Интернете, но безрезультатно.
Обновить
Добавление приведенных ниже ссылок на заголовки выдает cannot open source file
ошибку для каждого.
#include <QApplication>
#include <QInputDialog>
#include <QMessageBox>
Я также добавил предложения из комментариев к моему коду, теперь ниже:
#include <QtGui>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTextStream cout(stdout);
//declarations of variables
int answer = 0;
do{
//local variables
int factArg = 0;
int fact(1);
factArg = QInputDialog::getInt(0, "Factorial Calculator", "Factorial of:", 1);
cout << "User entered: " << factArg << endl;
int i = 2;
while (i <= factArg) {
fact = fact * i;
i;
}
QString response = QString("The factorial of %1 is %2.n%3").arg(factArg).arg(fact).arg("Do you want to compute another factorial?");
answer = QMessageBox::question(0, "Play again?", response, QMessageBox::Yes | QMessageBox::No);
} while (answer == QMessageBox::Yes);
return EXIT_SUCCESS;
}
Но я все еще получаю те же ошибки.
Комментарии:
1. Компилятор, вероятно, видит только прямое объявление для
QApplication
. Попробуйте добавить#include <QApplication>
.2. @G.M. это то, что я пробовал изначально, но когда я добавляю эту ссылку, я получаю следующую ошибку:
cannot open source file
3. изменить
#include <QtGui>
на#include <QtWidgets>
4. @eyllanesc Я получаю то же самое
cannot open source file QtWidgets
5. @Dean также добавляет
#include <iostream>
иusing namespace std;
Ответ №1:
Вы должны включить некоторые заголовки qt в приложение … в этом смысл сообщения
вам просто нужно добавить это в свой код
#include <QApplication>
#include <QInputDialog>
#include <QMessageBox>
Комментарии:
1. Я получаю
cannot open source file
для каждого из этих объявлений ..?
Ответ №2:
Правильными заголовками для включения являются следующие:
#include <QtWidgets/QApplication>
#include <QtWidgets/QInputDialog>
#include <QtWidgets/QMessageBox>
После их объявления компилятор принимает код.
Ответ №3:
Я собираюсь вырезать и вставить рабочую программу для вас.
В Qt, похоже, есть куча прямых определений. Я могу сказать, что мне не хватает правильного включаемого файла, если я попытаюсь заставить IDE действительно помочь мне выбрать вызов метода. Короче говоря, вам в значительной степени нужно #включить каждый тип виджета или другой класс, который вы собираетесь использовать. Я не сталкивался ни с какими ярлыками.
#include <QApplication>
#include "MainWindow.h"
using namespace std;
/**
* Main entry point.
*/
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}