我正在将我的VS2005 C ++代码转换为VS2010代码。不幸的是在VS2010中它给出了编译器警告,而在VS2005中它编译得很顺利。 (仅供参考:我已将警告设置为错误)。
请看一下代码片段:
错误发生在朋友声明所在的行。
class __declspec(dllexport) MyKey
{
friend size_t stdext::hash_value<MyKey>(const MyKey& key); // compiler warning at this line (pls see below for the actual compiler warning)
ubit32 m_uKey1;
};
template<> inline size_t stdext::hash_value<MyKey>(const MyKey& key)
{
return key.m_uKey1;
}
这是编译器警告,如下所示:
warning C4396: 'stdext::hash_value' : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
请帮我解决此错误。感谢。
答案 0 :(得分:1)
我通过在MyKey的类声明之前添加以下两个前向声明语句来获得修复。
class MyKey;
template<> size_t stdext::hash_value<MyKey>(const MyKey& key);
现在错误/警告消失了。我这样做了吗?
答案 1 :(得分:0)
由于你的朋友声明没有inline
说明符,这显然是MSVC编译器中的一个错误。您可以使用编译器选项或编译指示来禁止警告:
#pragma warning(disable: 4396)