В документации 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);
}
Я пытаюсь использовать версию tr1 mem_fun
, потому что при использовании std::mem_fun
мой код также не компилируется! Я не могу сказать из ошибки компилятора, связана ли проблема с моим кодом или она будет исправлена с помощью tr1 mem_fun
. Это ошибки компилятора C ++ для вас (или, может быть, это только я!).
Обновление: верно. Ответ заключается в том, чтобы записать его правильно как mem_fn!
Однако, когда я исправляю это, код все еще не компилируется.
Вот ошибка компилятора:
error C2562:
'std::tr1::_Callable_obj<_Ty,_Indirect>::_ApplyX' :
'void' function returning a value