2012-09-08 29 views
1

我有兩個文件:試圖使用函數在頭/ CPP文件

hello.h和HELLO.CPP

hello.h

#ifndef __HELLO_H__ 
#define __HELLO_H__ 

using namespace std; 

void PrintMessage(); 

#endif 

HELLO.CPP

#include <iostream> 
#include "hello.h" 

using namespace std; 

void PrintMessage() 
{ 
    cout << "I want to be displayed!"; 
} 

現在,我想在新的.cpp文件中使用PrintMessage(),但我不斷收到錯誤消息。這是我在做什麼:

printingmessage.cpp

#include <iostream> 
#include "hello.h" 

using namespace std; 

int main() 
{ 
    PrintMessage(); 
    return 0; 
} 

我只是做一些公然錯了嗎?我確實把它們都放在同一個文件夾中;我認爲它與Dev-C++(我用來編寫/編譯/運行的東西)有關,但我無法弄清楚。有人有主意嗎?


我創建了一個文件夾,我的桌面上,把所有三個文件裏面,我試圖編譯我的printingmessage.cpp文件,正是因爲它是。這是我得到的錯誤:

[Linker error] Undefined reference to 'PrintMessage()' 
+4

所有帶相鄰下劃線的標識符都是[保留](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier) 。在使用標頭守衛(或任何其他名稱,但這些是最常見的違規行爲)時請記住這一點。即使將它們更改爲一個下劃線仍然違反了另一個規則(從_ 開始),因此請務必牢記這一點。另外,''使用名稱空間標準符號''是你在你的頭文件的全局空間中絕對不需要**的東西。它可能會導致包含它的人感到混亂。 – chris

+2

至於錯誤,它是一個鏈接器錯誤(*未定義引用PrintMessage *)?如果是這樣,你的'hello.cpp'也需要內置到你的可執行文件中。 – chris

+0

我應該說我無法控制.h和.cpp文件。我也只能在我的主文件中執行#include「hello.h」。 –

回答

0

我不知道開發C++,但如果你做任何嚴重編碼學習/移動終端和使用make文件,或者一個新的我會強烈建議IDE等視覺工作室。

繼承人短腳本,你可以運行它保存爲bash.sh這樣

g++ hello.cpp -O2 -g -c 
g++ hello.o printmessage.cpp -Wall -O2 -o print 

東西然後用./print運行

+0

是的,你有幸沒有成爲班級環境給你的東西,但是你不必在Dev中開發項目 - 你只能編譯和運行一個文件。雖然不是實際項目的時間和空間節省,但如果需要此類鏈接,則必須自行鏈接它們。 – chris

-1

我不認爲你必須鍵入int main我認爲這u必須鍵入

ClassName::ClassName(){ 
//mycode; 
} 
+2

'int main()'或'int main(int argc,char ** argv)'對於命令行C或C++程序是非常正確的。您不必在C++中使用類,即使您這樣做,命令行程序也需要某種入口點,即「main」函數。 – MvG

0

我認爲它是與開發 - C++(就是我ü唱歌到 寫/編譯/運行),但我無法弄清楚。

我想也是這樣。在幕後,下面的事情要發生:

  1. 這兩個文件獲得編譯。這會爲每個*.cpp文件創建一個*.obj文件,並使用該標題。
  2. 目標文件是鏈接對彼此和可能反對所需的庫。

你的問題就出在第二步的「自己」的一部分:代碼編譯沒事,但連接失敗。頭文件在這一點上是無關緊要的。更確切地說,printingmessage.obj的鏈接器調用包含對在該目標文件或任何默認庫中未定義的函數的引用。最有可能的問題是由於*.cpp文件不屬於同一個項目。您需要創建一個多源文件項目,您可以在其中鏈接多個目標文件。你如何用Dev-C++做到這一點可能在他們的手冊中。