未解决的外部符号- Qt创建者

Unresolved external symbols - Qt creator

本文关键字:Qt 创建者 符号 外部 未解决      更新时间:2023-10-16

我一定错过了头和包含的基本概念,因为当我试图从单独的源文件调用即使是最简单的函数时,我得到一个错误:

主要。obj:-1:错误:LNK2019:未解析的外部符号"void __cdecl . void "buildDeck (int, int)"(?buildDeck@@YAXHH@Z)引用函数_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();
}

这给了我一个错误。但是,如果我将函数定义从deck.cpp移到main.cpp的底部,那么应用程序将构建。

所有的文件都包含在同一个项目中,并且存储在同一个目录中。

其他文件:

。箴文件

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

不确定你是否需要它,但这里有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

当您编辑.pro文件时,看起来Makefile没有重新生成。运行qmake并重试。您还可以检查deck.cpp是否已编译;有甲板吗?

是的,有些时候Makefile文件不更新,而你改变。pro文件。所以你必须运行qmake.

    右键单击项目Clean/Build菜单-> cleanAll
  • 右键单击项目运行qmake/Build菜单-> runQmake
  • 右键单击项目Build/Build菜单-> Build

专业建议:

我不知道,但有时Qt不更新Makefile。所以我建议所有人,每当你在项目中添加/删除任何资源,或者如果你的。pro文件中发生任何变化,只需运行qmake并构建你的项目(运行qmake手动更新项目路径,这有助于找到主窗口。obj文件)。