2009-11-12 30 views
1
template <typename T> 
class Test { 
     friend Test<T> & operator * (T lhs, const Test<T> & rhs) { 
      Test<T> r(rhs); 
//    return r *= lhs; 
     } 
} 

4智能感知:標識符 「T」 未定義視覺工作室智能感知錯誤

爲什麼在第3行所定義T但不是第4行?我的意思是我認爲這不是一個真正的錯誤,只是一個intellisense錯誤......它無論如何工作,但有什麼問題嗎?我可以修復它嗎?或者以某種方式去除紅色的波浪曲線?

我正在使用visual studio 2010.我想知道這是否也發生在其他版本?

+0

在朋友中,您應該可以使用'Test'而不是'Test '。但我不會:這不是你的錯誤;這是一個intellisense錯誤,所以我寧願發送一個錯誤報告給MS。 –

回答

1

智能感知顯示T未定義,因爲它是通用模板類型。根據你如何實例化類,T將是一個不同的類型。例如,如果您有Test<int> A,Tint類型,但是如果您致電Test<string> A,T是類型爲string的類型及其方法。

+0

好,但你說什麼適用於行3以及..但我沒有錯誤 這隻發生在朋友 –

+0

我認爲這是因爲朋友,它不使用任何私人成員它只是朋友與它分組在操作符重載的休息......但如果我讓它從類單獨我不明白的「錯誤」 模板 類測試{} 模板 的Vector3 &符*(T LHS, const Vector3 &rhs){ \t Vector3 r(rhs); \t return r * = lhs; } 它有關係嗎?更好地分組呢? –

1

通過在類內定義它似乎變得困惑。因此,將您的代碼更改爲:

template <typename T> 
class Test { 

    friend Test<T> & operator * (T lhs, const Test<T> & rhs); 
}; 

template <typename T> 
Test<T> & operator * (T lhs, const Test<T> & rhs) { 
    Test<T> r(rhs); 
} 

使問題消失。

這似乎是編譯器中的一個錯誤,根據我對規範的閱讀(特別是11.4/5),你的代碼應該是合法的。