我正在將代碼從VS2005移植到C++ Builder XE,以便它們將與兩個編譯器一起編譯。下面的代碼在VS2005下編譯得很好,但在C++ Builder下,我得到了帶有內聯函數rawtime()的主題錯誤消息;E2321聲明未指定標記或標識符
(E2321聲明未指定標籤或標識符)。
下面是代碼:
template<typename counter_type>
class synchronizer
{
private:
// PRIVATE TYPES
typedef timer<counter_type> timer_type;
typedef reference_point<counter_type> reference_point_type;
typedef time_data<counter_type> time_data;
typedef typename timer_type::time_stamp_type time_stamp_type;
typedef typename timer_type::time_span_type time_span_type;
typedef typename filetime_counter::value_type time_type;
typedef typename counter_type::value_type counter_value_type;
typedef synchronizer<counter_type> this_type;
/* some code removed for sake of this post */
public:
typedef counter_type counter_type;
typedef typename counter_type::value_type raw_value_type;
TIMESTATS_STMT(typedef statistics<counter_type> statistics_type);
inline raw_value_type rawtime() const /* Subject ERROR coming from this line */
{
return m_timer.now().value();
}
我嘗試下面這個職位它解決了具體問題,但不是這樣的一個結果。 template class operator overloading problem
想法/ Commnets?
---編輯:
反饋暗示TIMESTATS_STMT是錯誤的acutal原因所以在這裏是如何定義的。請注意,TIME_ENABLE_STATISTICS在VS2005和C++ Builder XE中均有註釋。
// #define TIME_ENABLE_STATISTICS
//
//
// Make null definitions
//
#define TIMESTATS_VAR(var, type, initial)
#define TIMESTATS_STMT(stmt)
#ifdef TIME_ENABLE_STATISTICS
//
// Make real definitions
//
#undef TIMESTATS_VAR
#define TIMESTATS_VAR(var, type, initial) type var = initial
#undef TIMESTATS_STMT
#define TIMESTATS_STMT(stmt) stmt
---編輯
出錯行確實出現了TIMESTATS_STMT線。我能夠通過取消定義NULL #define來進行更正,如下所示。
#ifdef TIME_ENABLE_STATISTICS
TIMESTATS_STMT(typedef statistics<counter_type> statistics_type);
#endif
感謝Mark,查看TIMESTATS_STMT如何定義的更新後。我嘗試評論TIMESTATS_STMT行,並在其他地方(當然)發現了大量錯誤。 – Eric 2011-01-19 15:09:55