1

VS2005 C++ コードを VS2010 コードに変換しています。残念ながら、VS2010 ではコンパイラの警告が表示されますが、VS2005 ではスムーズにコンパイルされます。(参考までに、警告をエラーとして処理するように設定しました)。

Pls はコード スニペットを見てください:

エラーは、フレンド宣言がある行にあります。

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 のクラス宣言の前に、次の 2 つの前方宣言ステートメントを追加して修正しました。

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 に答える