1

Visual Studio 2013 Professional で CryEngine2 SDK を使用してビルドしたすべてのプロジェクトで、このエラーがしばらく発生しています。ほとんどの場合、関数を次のように編集しました。

void CMultipleGrabHandler::Reset()
{
    std::for_each (m_handlers.begin(), m_handlers.end(), std::mem_fun (&CBaseGrabHandler::Reset));

    std::vector <CAnimatedGrabHandler*>::iterator it = m_handlers.begin();
    std::vector <CAnimatedGrabHandler*>::iterator end = m_handlers.end();
    for ( ; it != end; ++it)
        delete *it;

    m_handlers.erase (m_handlers.begin (), m_handlers.end ());
}

これに:

void CMultipleGrabHandler::Reset()
{
}

問題に対する適切なアプローチではないことはわかっていますが、'mem_fun' : is not a member of 'std'エラーは解消されました。

安定性が重要な新しいプロジェクトに取り組み始めたばかりなので、この問題を克服するための解決策を探しています。特定の状況でクラッシュを引き起こす可能性があるため、 の本体を削除すると良くありません。CMultipleGrabHandler::Reset()この問題の解決策を求めてインターネットを閲覧しましたが、何も見つかりませんでした (私が見つけた最も近いものは、何mem_funが機能するかの説明でした)。

std::離陸しようとしましmem_funたが、mem_fun is undefinedエラーが発生し、これがこのエラーを修正する正しい方法ではないことを示唆しています。

このプロジェクトはもともと Visual Studio 2005 で作成されたもので、最初にソリューションを開いたときに Visual Studio 2013 の形式に移行されました。これが問題の原因である可能性がありますか?どうすれば修正できますか?

編集:これは新しい VS バージョンにも適用されるため、を追加

4

1 に答える 1

4

関数std::mem_funはヘッダーで定義され<functional>ます。

#include一部の古いコンパイラでは、そのヘッダーで定義された関数とクラスを使用するために標準ライブラリ ヘッダーは必ずしも必要ではありません#include。これは VS に限ったことではありません。4.0 などの古い gcc バージョンにも当てはまりました。#include新しいコンパイラはより標準に準拠しており、標準ライブラリの関数とクラスを定義する実際のヘッダーが必要になります。

于 2014-07-04T20:36:09.803 に答える