2013-04-17 53 views
0

之前的非限定id我目前正在嘗試將庫(IsoAgLib)集成到我的CPP項目中。我對CPP沒有很深的經驗。我得到的錯誤是:「預期'{'令牌'之前的非限定id。我相信它與模板有關,因爲我遇到了其他類似的問題。它也可能與abs函數調用有關。任何幫助將非常感激!預期'{'標記t錯誤與模板

編輯:我的模板後留出的代碼,該文件是之前相當大

錯誤45預期不合格的ID「{」令牌
錯誤47預期不合格-ID之前「)」標記
錯誤46之前預期')「{」令牌

所有這些錯誤的發生上是「模板內聯牛逼ABS(const的牛逼& VAL)」(我離開開頭註釋掉)

#ifndef UTIL_FUNCS_H 
#define UTIL_FUNCS_H 

#include <IsoAgLib/isoaglib_config.h> 
#ifdef USE_DATASTREAMS_IO 
class StreamInput_c; 
#endif 
#include <cstdlib> // Include before vector or else CNAMESPACE stuff is screwed up for Tasking 
#include <cstring> 
#include <vector> 
#ifdef USE_VT_UNICODE_SUPPORT 
#include <string> 
#endif 

// Begin Namespace __IsoAgLib 
namespace __IsoAgLib 
{ 
    template <class T> inline T abs(const T& val) 
    { 
    return (val < 0) ? (-val) : val; 
    } 

} // end of namespace __IsoAgLib 
#endif 
線31
+3

也許在文件末尾添加一個關閉命名空間語句 – Nagasaki

+4

只要知道,帶有兩個下劃線或以下劃線開頭並帶有大寫字母的名稱爲實現(編譯器)保留,不應使用。 –

+0

@Nagasaki該文件實際上大得多,所以命名空間被關閉。 – Ryoooon

回答

0

在某些系統上,abs()和其他(如min()和max())被實現爲預處理器宏。要看看是否對你的情況下,加上一行

#undef abs 

此行之後:

#include <cstdlib> 

預處理器的命名空間的尊重和之前會盲目地取代其絕對值定義爲你的源代碼即使結果是語法混沌,它也會被送到編譯器。

相關問題