2013-09-24 99 views
-1

好吧我累了,找的問題,所以我想現在要問的時間:) 在我描述這個問題之前,我的項目在visual 2013上工作正常,但不是suse linux g ++ 4.6。 2C++在linux中添加頭文件-g ++

我們假設使用由三個文件console.h,console.cpp和keys.h組成的庫cio。使用三個文件的主程序稱爲happy.cpp。

現在在Visual Studio 2013中,一切正常。但是當我嘗試在Linux上編譯時,它給了我很多錯誤。

以下是該項目

//console.h 
namespace cio { 

// Console holds the state of the Console Input Output Facility 
// 
class Console { 
    //some varialbes and functions 
    int getRows() const; 
}; 

extern Console console; // console object - external linkage 

} // end namespace cio 

=============================================================================== 
//console.cpp 
/* table of platforms */ 
#define CIO_LINUX  1 
#define CIO_MICROSOFT 2 
#define CIO_BORLAND  3 
#define CIO_UNIX  4 

/* auto-select your platform here */ 
#if defined __BORLANDC__ 
    #define CIO_PLATFORM CIO_BORLAND 
    #define CIO_LOWER_LEVEL_H_ <conio.h> 
#elif defined _MSC_VER 
    #define CIO_PLATFORM CIO_MICROSOFT 
    #include <windows.h> 
    #define CIO_LOWER_LEVEL_H_ <conio.h> 
#elif defined __MACH__ 
    #define CIO_PLATFORM CIO_UNIX 
    #define CIO_LOWER_LEVEL_H_ <curses.h> 
#elif defined __GNUC__ 
    #define CIO_PLATFORM CIO_LINUX 
    #define CIO_LOWER_LEVEL_H_ <ncurses.h> 
#elif !defined __BORLANDC__ && !defined _MSC_VER && !defined __GNUC__ && !defined __MACH__ 
    #error CONSOLE_PLT is undefined 
#endif 

extern "C" { 
    #include CIO_LOWER_LEVEL_H_ 
} 

#include "console.h" 
#include "keys.h" 

namespace cio { // continuation of cio namespace 

// getRows retrieves the number of rows in the output object 
// 
int Console::getRows() const { 
    return bufrows; 
} 

} // end namespace cio 
================================================================================ 
//////happy.cpp 
#include "console.h" 
#include "keys.h" // for ESCAPE 
using namespace cio; 

int main() { 
    int key, rows, columns; 

    // get screen dimensions 
    rows = console.getRows(); 
} 

在編譯的簡要說明代碼使用的 「g ++ happyface.cpp」 命令,我獲得以下錯誤

happyface.cpp :(文字+ 0xd中):未定義的參考cio::console' happyface.cpp:(.text+0x12): undefined reference to cio :: Console :: getRows()const

我不知道我在做什麼錯在這裏? 我也嘗試過,包括路徑「g ++ -I〜/ happy/console.h〜/ happy/console.cpp〜/ happy/keys.h」,仍然是同樣的問題。

+2

什麼是CIO ???? –

+0

這是一個鏈接器錯誤,而不是編譯器錯誤。 '-I'不會幫助,因爲這是一個編譯器標誌。 –

回答

0
extern Console console; // console object - external linkage 

確保它實際上是在某個地方定義的,例如,在console.cpp。我沒有看到任何定義。

g++ -I ~/happy/console.h ~/happy/console.cpp ~/happy/keys.h 

-I標誌不應該是必需的。假設你的目錄看起來是這樣的:

~/happy 
- console.h 
- console.cpp 
- keys.h 
- happyface.cpp 

你應該能夠只是做

cd ~/happy 
g++ console.cpp happyface.cpp -o happyface 
./happyface 
+0

'extern控制檯控制檯;'**是**聲明。缺少的是**定義**。 –

+0

哎呀你是對的,編輯它。 – rwols

0

您必須將每個翻譯單元(也稱爲.cpp文件)鏈接在一起。使用g++ happyface.cpp console.cpp編譯。

0

您在console.h您的變量控制檯聲明:

extern Console console; 

,但你的避風港」在任何地方定義它。

添加的定義happy.cpp:

namespace cio { 
Console console; 
} 

另一個明顯的問題:你是不是編譯和鏈接console.cpp文件。 「爲了快速和骯髒的編譯,你可以這樣做:

g++ happyface.cpp console.cpp