2010-09-27 118 views
5

我是新手,用C++編寫頭文件。這是我當前的代碼:如何在C++中鏈接頭文件

//a.h 
#ifndef a_H 
#define a_H 
namespace hello 
{ 
    class A 
    { 
    int a; 
    public: 
     void setA(int x); 
     int getA(); 
    }; 
} 
#endif 

//a.cpp 
#include "a.h" 
namespace hello 
{ 
    A::setA(int x) 
    { 
    a=x; 
    } 
    int A::getA() 
    { 
    return a; 
    } 
} 

//ex2.cpp 
#include "a.h" 
#include<iostream> 
using namespace std; 

namespace hello 
{ 
    A* a1; 
} 
using namespace hello; 
int main() 
{ 
    a1=new A(); 
    a1->setA(10); 
    cout<<a1->getA(); 
    return 1; 
} 

當我試着使用g++ ex2.cpp編譯它,我得到這個錯誤:

In function `main': 
ex2.cpp:(.text+0x33): undefined reference to `hello::A::setA(int)' 
ex2.cpp:(.text+0x40): undefined reference to `hello::A::getA()' 
collect2: ld returned 1 exit status 

爲什麼沒有工作,我怎麼能解決這個問題?

+0

請使用源代碼格式化功能,請單擊編輯器中的「101 010」圖標。 – mikerobi 2010-09-27 14:20:02

+1

您在a.cpp文件中忘記了'A :: setA'前面的'void'。 – 2010-09-27 14:22:42

回答

2

目前正在編譯,只有鏈接ex2.cpp但此文件具有利用一流的畫質和功能的要求出現在a.cpp所以你需要編譯和鏈接a.cpp還有:

g++ ex2.cpp a.cpp 

上面的命令將源文件(.cpp)編譯爲目標文件,並將它們鏈接起來以提供a.out可執行文件。

23

您不鏈接頭文件。您鏈接目標文件,它們是通過編譯.cpp文件創建的。您需要編譯所有源文件並將生成的目標文件傳遞給鏈接器。

從錯誤消息,它似乎你使用GCC。如果是這樣,我認爲你可以做
g++ ex2.cpp a.cpp
讓它編譯.cpp文件並調用鏈接器與生成的目標文件。

+8

對於'你不鏈接頭文件'。 :) – 2010-09-27 14:28:45

8

您需要編譯和鏈接源文件,如:

g++ ex2.cpp a.cpp -o my_program 
3

您需要編譯,然後鏈接兩個源(.cpp)文件:

g++ -Wall -pedantic -g -o your_exe a.cpp ex2.cpp 
+1

我可以建議'-Werror' :)? – 2010-09-27 14:48:46