2013-06-12 52 views
1

我想學習使用頭文件。我得到了一個錯誤。這裏是我的代碼:如何使用頭文件?

printmyname.h:

void printMyName(); 

printmyname.cpp:

#include "printmyname.h" 

void printMyName() { 
    cout << "omer"; 
} 

try.cpp(主文件):

#include <iostream> 
#include "printmyname.h" 
using namespace std; 


int main() { 
    printMyName(); 

    return 0; 
} 

這裏是錯誤:

undefined reference to `printMyName()` 

這是什麼問題?

+2

我建議你完成編譯錯誤信息。你會得到更好的建議。 –

+0

你的平臺是什麼? –

+1

你應該給你迄今使用的命令來編譯你的代碼。你的代碼沒問題,就是你編譯它的時候有問題! – zmo

回答

3

在這種情況下,未定義的引用與您的頭文件無關。這意味着鏈接程序找不到printmyname.cpp中的printMyName的實現。如果使用的是g++,你應該嘗試:

g++ try.cpp printmyname.cpp -o yourBinaryName 

如果您正在使用一個makefile,你應該添加依賴(printmyname.cpp)正確的try.cpp。

編輯:

由於@zmo在他的評論中建議:

你也可以做到這一點通過兩次彙編(更適合用Makefile文件):

g++ -c printmyname.cpp 
g++ try.cpp printmyname.o -o yourBinaryName 
+0

你也可以通過兩次編譯(比較適合Makefiles):'g ++ -c printmyname.cpp'' g ++ try.cpp printmyname.o -o tryprintmyname',給出比'a.out'更好的名字:-) – zmo

+0

是的,謝謝@zmo – StarPinkER

-6

您需要添加僅在printMyName.h中的printMyName.cpp中的代碼/定義。

void printMyName(); 
{ 
    cout << "omer"; 
} 
+4

不好的建議(雖然它可以解決問題)。 –

+1

OP想要學習如何在C++中正確使用頭文件,並且你在勸他去做一件違背模塊性的事情! – zmo

+0

如果你這樣做的話,你還需要將它內聯。 – doctorlove

0

如果您使用的是Windows,則需要將printmyname.cpp添加到您的項目中。 考慮添加include guard to your header

#ifndef PRINTMYNAME_INCLUDED 
#define PRINTMYNAME_INCLUDED 

void printMyName(); 

#endif 

您還需要將#include <iostream>using namespace std;從try.cpp到printmyname.cpp文件移動。