1

我正在将我的 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

请帮我解决这个错误。谢谢。

4

2 回答 2

1

我通过在 MyKey 的类声明之前添加以下两个前向声明语句来解决此问题。

class MyKey;

template<> size_t stdext::hash_value<MyKey>(const MyKey& key);

现在错误/警告消失了。我做得对吗?

于 2013-03-28T09:40:24.293 回答
0

由于您的朋友声明没有inline说明符,这显然是 MSVC 编译器中的错误。您可以使用编译器选项或编译指示抑制警告:

#pragma warning(disable: 4396)
于 2015-04-07T18:13:55.383 回答