2015-11-06 43 views
-1

我的項目中有2個cpp和3個頭文件。當我在VS中編譯它時,它工作順利,我沒有收到任何錯誤消息。編譯器沒有看到我的主要功能(未定義的主要參考)

g++ -o program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

它說:但是,當我試圖通過這條線編譯SSH網絡上

In function `_start': 
(.text+0x20): undefined reference to `main' 

不要說「不要忘了寫main函數」,因爲它已經在那裏和我的項目在VS上工作。那麼該怎麼辦?

這是從我的代碼相關的部分。 Program.cpp直到主:

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
#include <ctype.h> 
#include <cstring> 
#include <cstdio> 
#include "lineoperations.h" 
using namespace std; 

line bankline; 
bool operate(char); 
void search(char[]); 
void add(char[]); 
void removee(char[]); 
void transaction(); 
void printline(); 

int main(){ 
    bankline.create(); 
    bool end = false; 
    while (!end) { 
     end = bankline.decideFunction(); 
    } 
    bankline.close(); 
    return EXIT_SUCCESS; 
} 

它繼續,但沒有必要粘貼他們我猜。如果您需要查看其他cpp文件或頭文件,我也會粘貼它們。

+3

你能提供[mcve]嗎? – NathanOliver

+0

當你不在VS中編譯時,你是否有可能從編譯中排除main()的#ifdef? –

+1

很多事情都可能出錯。如果這個答案看起來不是特別令人滿意,請發佈更多信息,是的,請提供一個MCVE。 –

回答

5

命令:

g++ -o program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

告訴g++編譯和鏈接中的文件:

lineoperations.cpp customer.h transaction.h lineoperations.h 

和輸出的所謂program.cpp可執行程序。

這種失敗,你已經注意到,因爲 mainprogram.cpp定義的鏈接錯誤,你不編譯或鏈接。

試試這個:

g++ -o program program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

,或者如果你是在Windows上:

g++ -o program.exe program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

而且順便說一句,沒有必要列出在命令行的頭文件。他們被包含在 的源文件中,我想。

+0

這幫了我。我擺脫了undef。 REF。錯誤。我現在有一堆「多個定義」錯誤,但這與我猜這篇文章沒有關係。謝謝!順便說一下,這些多個定義錯誤的來源,是否可以是因爲我們聲明瞭程序兩次?程序和program.cpp ?? –

+1

技術上他有可能將.h文件編譯爲獨立的翻譯單元,但這很奇怪,並且違背了C++文件的命名約定。最後,這可能是不必要的或完全錯誤的。 – SirGuy

+0

@K。Yazoglu你沒有「宣佈節目兩次」。您的多重定義錯誤是一個無關的問題,您可能希望將其作爲另一個問題的主題。您也可以[接受](http://stackoverflow.com/help/accepted-answer)我的回答。 –