2013-10-30 159 views
-2

我正在爲路由器編寫代碼,並且我已經將其編寫到了我應該爲路由表編寫代碼的部分。我做了一個類,它看起來像這樣:將一個全局變量傳遞給一個函數 - C++

//Global variables 
unsigned char Dst_IP[4]; 
unsigned char Nxt_Hop[4]; 
int Mask; 
int OutIF; 

RTEntry::RTEntry(unsigned char *dst_IP, int mask, int outIF, unsigned char *nxt_Hop) 
{ 
    Dst_IP = dst_IP; 
    Mask = mask; 
    OutIF = outIF; 
    Nxt_Hop = nxt_Hop; 
} 

bool match(unsigned char *IPaddress) 
{ 
    bool isMatch = false; 

    if(IPaddress == dst_IP) 
    { 
     isMatch = true; 
    } 

    return isMatch; 
} 

我得到一個錯誤,當我嘗試歸因於dst_IP沒有在比賽功能的範圍內聲明的事實進行編譯。有沒有人有如何解決這個問題的想法?這可能與指針有關。我應該提一提,我對C++來說很新穎。

在此先感謝!

+0

我看到「聲明」的唯一'dst_IP'在'RTEntry'的參數列表中。你是否想要改變傳入的內容(這就是你所做的)。 – crashmstr

+0

爲什麼你會通過一個全球*全球*任何地方訪問?此外,全球的名稱是'Dst_IP',而不是'dst_IP'。另外,你爲什麼要使用全局變量? – thokra

+2

'IPaddress == dst_IP' < - 那不符合你的想法。 –

回答

0

(我假設你在全局的前面有private關鍵字是一些不規範的擴展你的編譯器提供。使用標準C++,該關鍵字是不允許有。)

C++是區分大小寫的。全局變量名爲Dst_IP,但在match()中,您寫了dst_IP

無關:

比較C字符串,使用std::strcmp()std::strncmp()(使用後者,如果你想與可能不能爲null結尾的字符串更加安全)從<cstring>頭。在指針上使用==運算符時,它只比較指針,而不是它們指向的內容。或者更好的是,使用std::string而不是原始C字符串。

+0

感謝您的反饋。關於我的全局變量前面的私有標識符,我沒有真正意識到把它們放在哪裏。到目前爲止,它們都是寫在頭文件(.h)中的,但我不知道在哪裏將它們寫入我的程序文件(.cpp)中。我應該提及我對C++ – Zeliax

+0

很陌生@Zeliax不要將全局變量放在頭文件中。當包含頭文件時,頭文件中的文本會被複制到源文件中,所以有幾個'#include'語句可以得到幾個變量副本。你應該閱讀關於如何使用'extern'變量的教程。大多數時候,完全避免全局變量。 –

+0

上面的代碼(線程的主體)來自.cpp文件。我只是不知道如何使用我在頭文件中聲明的私有數據。 – Zeliax

相關問題