2013-04-04 38 views
1

我有一個簡單的程序,我完全從http://www.learncpp.com/cpp-tutorial/19-header-files/的示例中複製,因爲我正在學習如何使用多個文件創建C++程序。在一個非常簡單的C++程序中出現「undefined reference」錯誤

程序編譯,但建立時,出現以下錯誤:

/tmp/ccm92rdR.o:在功能主要: main.cpp中:(文本+ 0X1A):未定義參考`添加(INT ,INT)」 collect2:LD返回1退出狀態

下面的代碼:

的main.cpp

#include <iostream> 
#include "add.h" // this brings in the declaration for add() 

int main() 
{ 
    using namespace std; 
    cout << "The sum of 3 and 4 is " << add(3, 4) << endl; 
    return 0; 
} 

add.h

#ifndef ADD_H 
#define ADD_H 

int add(int x, int y); // function prototype for add.h 

#endif 

add.cpp

int add(int x, int y) 
{ 
    return x + y; 
} 

有誰知道爲什麼出現這種情況?

非常感謝。

+3

的代碼幾乎是完美的。在'add.cpp'中包含'add.h'。將其編譯爲'g ++ main.cpp add.cpp',它會生成'a.out' – Arun 2013-04-04 02:54:44

回答

4

代碼幾乎完美。

添加一行#include "add.h" in add.cpp`。

一起編譯文件作爲g++ main.cpp add.cpp,它會產生一個可執行a.out

可以運行可執行文件./a.out同時會產生的輸出「的3和4的總和爲7」(沒有引號)

+0

謝謝Arun Saha,它的工作非常完美。順便說一下,我是否總是必須將我的程序中的所有文件彙總在一起,還是有更簡單的方法? – StickBoy 2013-04-04 03:11:30

+0

不客氣!您可以將每個'.cpp'文件分別編譯爲'.o'文件,並最終將所有'.o'文件鏈接到一個可執行文件。步驟如下:'1)g ++ -c main.cpp 2)g ++ -c add.cpp 3)g ++ main.o add.o'。但是,一旦這很快變得乏味。在這種情況下,使用工具來管理文件的編譯和鏈接。該工具被稱爲**'make' **(http://en.wikipedia.org/wiki/Make_(software))它基於一個配置文件,通常命名爲'Makefile',它必須提供。你可以搜索並開始一個簡單的'Makefile' – Arun 2013-04-04 03:30:45

+0

非常感謝!我在其他網站上尋找簡單直接的答案,但沒有發現任何有用的東西。我會嘗試這個工具。 :) – StickBoy 2013-04-04 03:46:12

0

未定義的引用可能發生在具有許多.c或.cpp源文件並且其中一些未被編譯時。

一個很好的「一步一步」關於如何做到這一點的解釋是here

相關問題