30

別のソース ファイルから最も単純な関数を呼び出そうとするとエラーが発生するため、ヘッダーとインクルードの基本的な概念が欠けているに違いありません。

main.obj:-1: エラー: LNK2019: 未解決の外部シンボル "void __cdecl buildDeck(int,int)" (?buildDeck@@YAXHH@Z) が関数 _main で参照されています

デッキ.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

デッキ.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 の下部に関数定義を移動すると、アプリケーションがビルドされます。

すべてのファイルは同じプロジェクトに含まれ、同じディレクトリに保存されます。

その他のファイル:

.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

必要かどうかはわかりませんが、ここに 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
4

2 に答える 2

80

.pro ファイルを編集したときに Makefile が再生成されていないようです。qmake を実行して、もう一度やり直してください。また、deck.cpp がコンパイルされているかどうかを確認することもできます。ビルドディレクトリにdeck.oがありますか?

于 2012-12-28T13:05:42.760 に答える
3

はい、.pro ファイルを変更している間、Makefile ファイルが更新されないことがあります。したがって、qmake を実行する必要があります。

次の手順に従います。

  • プロジェクトのクリーン/ビルド メニューを右クリック -> cleanAll
  • プロジェクトを右クリック Run qmake / Build メニュー -> runQmake
  • プロジェクトを右クリック ビルド / ビルド メニュー -> ビルド

プロのアドバイス:

わかりませんが、Qt が Makefile を更新しないことがあります。したがって、プロジェクトのリソースを追加/削除するとき、または.proファイルに変更が発生した場合は、qmakeを実行してプロジェクトをビルドすることをお勧めします(qmakeを手動で実行してプロジェクトのパスを更新すると、メインウィンドウを見つけるのに役立ちます.obj ファイル)。

于 2018-05-31T06:54:01.253 に答える