c++ - español - Símbolos externos no resueltos-creador de Qt
solidity español (2)
Me falta un concepto básico con encabezados e incluye porque cuando intento llamar incluso a la función más simple desde un archivo fuente separado, aparece un error:
main.obj: -1: error: LNK2019: símbolo externo no resuelto "void __cdecl buildDeck (int, int)" (? buildDeck @@ YAXHH @ Z) al que se hace referencia en la función _main
deck.h
#ifndef DECK_H
#define DECK_H
#include <QString>
void buildDeck(int deckSize, int jokers);
struct card
{
QString suit;
QString color;
int rank;
};
#endif // DECK_H
deck.cpp
#include"mainwindow.h"
#include "deck.h"
void buildDeck(int deckSize, int jokers)
{
int blackRed = deckSize-=jokers;
}
main.cpp
#include "mainwindow.h"
#include "deck.h"
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
buildDeck(10,20);
return a.exec();
}
Y esto me da un error. Sin embargo, si muevo la definición de la función de deck.cpp a la parte inferior de main.cpp, la aplicación se compilará.
Todos los archivos están incluidos en el mismo proyecto y se almacenan en el mismo directorio.
Otros archivos:
archivo .pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = carddeck
TEMPLATE = app
SOURCES += main.cpp/
mainwindow.cpp /
deck.cpp
HEADERS += mainwindow.h /
deck.h
FORMS += mainwindow.ui
no estoy seguro si lo necesitas, pero aquí está mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QTextEdit>
#include <QCheckBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void runButtonClicked();
private:
Ui::MainWindow *ui;
QPushButton *runButton;
QTextEdit * runText;
QCheckBox * betHearts;
QCheckBox * betDiamonds ;
QCheckBox * betClubs;
QCheckBox * betSpades ;
QCheckBox * betFlush ;
QCheckBox * betAllRed;
QCheckBox * betAllBlack ;
};
#endif // MAINWINDOW_H
Parece que Makefile no se regeneró cuando editó el archivo .pro. Ejecute qmake y vuelva a intentarlo. También podría verificar si deck.cpp está compilado o no; ¿hay un deck.o en el directorio de compilación?
sí, algún tiempo el archivo Makefile no se actualiza mientras usted cambia el archivo .pro. Entonces tienes que ejecutar qmake.
Sigue estos pasos:
- Haga clic con el botón derecho en el menú Clean / Build del proyecto -> cleanAll
- Haga clic derecho en el proyecto Ejecutar qmake / Menú de compilación -> runQmake
- Haga clic derecho en el menú de compilación / compilación del proyecto -> compilación
Consejo Pro:
No sé, pero en algún momento Qt no está actualizando Makefile. así que recomendé a todos siempre que agregue / elimine cualquier recurso en el proyecto o si ocurre algún cambio en su archivo .pro, simplemente ejecute qmake y cree su proyecto (ejecute q haga manualmente para actualizar la ruta del proyecto, lo que ayuda a encontrar la ventana principal) archivo .obj).