tutorial español aprender c++ qt unresolved-external

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).