2012-05-21 61 views
3

我從這篇文章中學到了在命名空間中創建幫助函數的方法。 'Helper' functions in C++如何避免輔助函數被警告? 「xxx定義但未使用」

//stringhelper.hpp 
namespace utility{ 
static std::string intToString(int integer) 
{ 
    std::stringstream sstream; 
    sstream << integer; 
    return sstream.str(); 
} 
static void toLowerCase(std::string& y) 
{ 
    std::transform(y.begin(), y.end(), y.begin(), (int(*)(int))tolower); 
} 
} 

包括我這個頭,但我得到了以下警告

'void utility::toLowerCase(std::string&)' defined but not used 

是。我使用了intToString(int整數),但不是toLowerCase(std :: string &)。我不希望看到這些警告或每個標題劃分一個幫助程序功能。

任何人都可以提出一個好的解決方案嗎?我應該禁用警告嗎?謝謝

+0

什麼是你的編譯器?警告及其啓用和禁用是特定於編譯器的。 –

+0

當然是GCC。沒有其他編譯器會在意。 –

+5

考慮到你使用它們的方式(包括從一個頭文件中獲得,因此它們在每個翻譯單元中具有相同的定義),使它們成爲「內聯」而不是「靜態」會更有意義。有沒有什麼特別的理由讓你想讓他們內部聯繫? –

回答

3

您必須關閉該警告的選項:

-Wno-unused-function 

上的功能,通過功能的基礎上,與海灣合作委員會,你可以定義:

void whatever() __attribute__ ((unused)); 

void whatever() { 
    stuff; 
} 

這告訴GCC是該功能意味着可能未被使用。

更多信息,請參見compiler docs屬性

+0

「OrgnlDave。這個方法可行,但是當我想結合定義時,編譯器返回」屬性在函數定義中不允許「的錯誤,例如這個定義返回錯誤: \t static void toLowerCase(std ::字符串&y)__attribute__((未使用)){ \t \t std :: transform(y.begin(),y.end(),y.begin(),(int(*)(int))tolower); \t } – Mickey

+0

helper函數的實現是用頭文件寫的,我沒有單獨的cpp文件 – Mickey

+0

@Mickey它可以,你可以聲明簽名,然後直接在底下實現它,就像我顯示的那樣 –