在创建Matrix类以便于对数组的多维访问时,我偶然发现了一个奇怪的错误:如果为()运算符创建多个重载,Visual Studio C ++优化器(2010和2012)崩溃。
我设法隔离了错误。将此作为单个代码文件放在项目中会使其崩溃:
template <class T>
class Foo
{
T& Foo::operator() (int i)
{
return 0;
}
// C1001 - Commenting this second overload makes the compiler work correctly
T& Foo::operator() (char c)
{
return 0;
}
};
原始代码的重载是(int x,int y),另一个是(Vector2 pos),但错误是相同的。
是否有针对此的解决方法,还是我不得不忍受的VS错误?
答案 0 :(得分:3)
当它作为 declarator-id 时,不允许在类范围内使用Foo::
。试试这个:
template <class T>
class Foo
{
T& operator() (int i)
// ^
{
return 0;
}
T& operator() (char c)
// ^
{
return 0;
}
};
此外,当您尝试返回0
时,返回reference
将无法编译。
最后,您的示例中的运算符为private
;)
答案 1 :(得分:1)
这是您Foo::
的非法使用。删除它,代码编译。看起来VC ++知道它无效,但无法报告编译错误。
template <class T>
class Foo
{
T& operator() (int i)
{
return 0;
}
T& operator() (char c)
{
return 0;
}
};