VS2008 SP1のドキュメントでは、std::tr1::mem_fun
.
では、なぜ、 を使用しようとするとstd::tr1::mem_fun
、このコンパイル エラーが発生するのでしょうか?:
'mem_fun' : is not a member of 'std::tr1'
同時に、std::tr1::function
問題なく使用できます。
コンパイルしようとしているサンプルコードは次のとおりです。これは、のインスタンスを呼び出すことになっていTakesInt
ますTest
。function<void (int)>
#include "stdafx.h"
#include <iostream>
#include <functional>
#include <memory>
struct Test { void TakesInt(int i) { std::cout << i; } };
void _tmain()
{
Test* t = new Test();
//error C2039: 'mem_fun' : is not a member of 'std::tr1'
std::tr1::function<void (int)> f =
std::tr1::bind(std::tr1::mem_fun(&Test::TakesInt), t);
f(2);
}
mem_fun
私のコードを使用std::mem_fun
してもコンパイルされないため、私は の tr1 バージョンを使用しようとしています! 問題が私のコードにあるのか、それとも tr1 のmem_fun
. これは C++ コンパイラ エラーです (または、私だけかもしれません!)。
更新:そうですね。答えは mem_fn! と正しく綴ることです。
ただし、それを修正しても、コードはまだコンパイルされません。
コンパイラエラーは次のとおりです。
error C2562:
'std::tr1::_Callable_obj<_Ty,_Indirect>::_ApplyX' :
'void' function returning a value