我想我碰到了一個(可能的)VC6(我知道了,這是我們使用的,)編譯器錯誤,但我開放的事實是我錯過了一些愚蠢的事實。考慮下面的代碼(這只是一個例子!):由模板成員函數引起的錯誤C2275。這段代碼錯了嗎?
#include <iostream>
// Class with template member function:
class SomeClass
{
public:
SomeClass() {};
template<class T>
T getItem()
{
return T();
};
};
// Dummy just used to recreate compiler error
class OtherClass
{
public:
OtherClass() {};
};
std::ostream& operator<<(std::ostream& oStr, const OtherClass& obj)
{
return oStr << "OtherClass!";
};
// Main illustrates the error:
int main(int argc, char* argv[])
{
SomeClass a;
OtherClass inst2 = a.getItem<OtherClass>(); // Error C2275 happens here!
std::cout << inst2 << std::endl;
return 0;
}
如果我嘗試編譯這段代碼VC6,模具上a.getItem<OtherClass>()
產生:
Error C2275: 'OtherClass' : illegal use of this type as an expression
。
我忽略了一些微不足道的語法問題嗎?我打破規則? 這段代碼在gcc 4.3.4下編譯得很好。這是VC6的另一個合規性問題嗎?
謝謝!
I'除非有人出現,否則就會把這個作爲正確的答案! – acanaday 2010-09-21 21:23:14