Ошибка C3867: нестандартный синтаксис; используйте '&', чтобы создать указатель на членC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка C3867: нестандартный синтаксис; используйте '&', чтобы создать указатель на член

Сообщение Anonymous »

Я пытаюсь вставить функцию класса в значение карты, но получаю ошибку:

Код: Выделить всё

Error   C3867   'ActionsOnTheDictionary::select': non-standard syntax; use '&' to create a pointer to member
Все методы, кроме select работают, но они также не лежат в классе.
Вот код в main( ):

Код: Выделить всё

std::map< std::string, std::map< std::string, size_t > > mapDictionaries;

using namespace std::placeholders;
ActionsOnTheDictionary A(mapDictionaries);

std::map< std::string, std::function < void(std::map< std::string, std::map< std::string, size_t > >& , std::istream&, std::ostream&) > > command;
{
command["help"] = std::bind(printCommands);
command["create"] = createDictionary, mapDictionaries, _1, _2;
command["delete"] = deleteDictionary, mapDictionaries, _1, _2;
command["list"] = printNamesDictionaries, mapDictionaries, _1, _2;
command["add"] = add, mapDictionaries, _1, _2;
command["unite"] = unite, mapDictionaries, _1, _2;
command["rename"] = rename, mapDictionaries, _1, _2;
command["clear"] = clear, mapDictionaries, _1, _2;
command["select"] = A.select, mapDictionaries, _1, _2; //Error

}
Вот код самого класса:

Код: Выделить всё

class ActionsOnTheDictionary
{
public:
ActionsOnTheDictionary(std::map< std::string, std::map< std::string, size_t > > & dictionary);
~ActionsOnTheDictionary() = default;

void select(mapDictionaries_t& mapDictionaries, std::istream& in, std::ostream& out);

private:
std::map< std::string, std::map< std::string, size_t > >& SelectedDictionary;
};

ActionsOnTheDictionary::ActionsOnTheDictionary(std::map< std::string, std::map< std::string, size_t > >& dictionary) :
SelectedDictionary(dictionary)
{}
void ActionsOnTheDictionary::select(mapDictionaries_t& mapDictionaries, std::istream & in, std::ostream & out)
{

}
Я пробовал использовать std::bind(), но тоже ничего не помогло.


Подробнее здесь: https://stackoverflow.com/questions/784 ... -to-member
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»