在 *.cpp 而不是 *.h [重复] 中定义函数时出现未定义引用错误

undefined-reference Error when defining a function in the *.cpp instead of in the *.h [duplicate]

提问人:user3443063 提问时间:5/12/2015 更新时间:5/12/2015 访问量:71

问:

我有一个问题:我有 2 个类:mainwindowErgebnisAusFortran,如下所示:

mainwindow.h:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H   
    #include <QMainWindow>
    #include <QDebug>
    #include <QString>
    #include "ErgbnisAusFortran.h"        

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();        

    public:
        ErgbnisAusFortran Berechnung();        
        ErgbnisAusFortran Berechnung_1()
        {
           ErgbnisAusFortran ret;
           qDebug() << " ich berechne Berechnung_1..." ;               
           return ret;
        }

    private slots:
        void on_pb_Calculate_clicked();      

    private:
        Ui::MainWindow *ui;
    };

    #endif // MAINWINDOW_H

主窗口.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ErgbnisAusFortran.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pb_Calculate_clicked()
{
     ErgbnisAusFortran Ergebnis_1;
     ErgbnisAusFortran Ergebnis;
     Ergebnis_1 = Berechnung_1();
     Ergebnis = Berechnung();
}

ErgbnisAusFortran Berechnung()
{
    ErgbnisAusFortran ret;
    qDebug() << " ich berechne..." ;
    return ret;
}

让我感到困惑的是以下几点:

我有 2 个方法 Berechnung() 和 Berechnung_1()。

Berechnung() 在 mainwindow.h 中声明,并在 mainwindow.cpp 中定义

Berechnung_1() 在 mainwindow.h 中声明,并在 mainwindow.h 中定义

当我运行程序时,我收到以下有关Berechnung()的错误:

对 MainWindow::Berechnung() 的未定义引用。Berechnung_1效果很好。这让我感到困惑,因为我在 mainwindow.cpp 中包含 mainwindow.h。

有谁知道出了什么问题吗?

谢谢

伊特利

C++ Qt undefined-reference

评论


答:

2赞 Mike Seymour 5/12/2015 #1

您忘记限定成员函数的名称:

ErgbnisAusFortran MainWindow::Berechnung()
                  ^^^^^^^^^^^^

因此,这声明了一个新的非成员函数,使成员函数未定义。