Anonymous
Ошибка C3867: нестандартный синтаксис; используйте '&', чтобы создать указатель на член
Сообщение
Anonymous » 15 май 2024, 23:27
Я пытаюсь вставить функцию класса в значение карты, но получаю ошибку:
Код: Выделить всё
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
1715804820
Anonymous
Я пытаюсь вставить функцию класса в значение карты, но получаю ошибку: [code]Error C3867 'ActionsOnTheDictionary::select': non-standard syntax; use '&' to create a pointer to member [/code] Все методы, кроме select работают, но они также не лежат в классе. Вот код в main( ): [code]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 } [/code] Вот код самого класса: [code]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) { } [/code] Я пробовал использовать std::bind(), но тоже ничего не помогло. Подробнее здесь: [url]https://stackoverflow.com/questions/78486169/error-c3867-non-standard-syntax-use-to-create-a-pointer-to-member[/url]