功能:术语不评估功能 1149 上的错误
Functional: Term does not evaluate error on functional 1149
我不明白其中的错误。我正在尝试使用 std::function
s 将成员函数作为参数传递。除了第 4 种也是最后一种情况外,它工作正常。
void window::newGame() {
}
//show options
void window::showOptions() {
}
void window::showHelp() {
}
//Quits program
void window::quitWindow() {
close();
}
void window::createMenu() {
std::function<void()> newGameFunction = std::bind(&window::newGame);
std::function<void()> showOptionsFunction = std::bind(&window::showOptions);
std::function<void()> showHelpFunction = std::bind(&window::showHelp);
std::function<void()> quitWindowFunction = std::bind(&window::quitWindow);
}
std::function
的前 3 次用法没有错误,但在最后的用法中我得到以下信息:
Error 1 error C2064: term does not evaluate to a function taking 0 arguments
functional
第 1149 行。
我只知道错误发生在线上,因为我把其他所有的都去掉了,这是唯一一个导致各种组合出现问题的错误。
None 应该编译。成员函数很特殊:它们需要一个对象。所以你有两个选择:你可以用一个对象绑定它们,或者你可以让它们带一个对象。
// 1) bind with object
std::function<void()> newGameFunction = std::bind(&window::newGame, this);
// ^^^^^^
std::function<void()> showOptionsFunction = std::bind(&window::showOptions, this);
// 2) have the function *take* an object
std::function<void(window&)> showHelpFunction = &window::showHelp;
std::function<void(window*)> quitWindowFunction = &window::quitWindow;
后两者可以这样称呼:
showHelpFunction(*this); // equivalent to this->showHelp();
quitWindowFunction(this); // equivalent to this->quitWindow();
这最终取决于您对 function
的用例,您希望以何种方式进行操作 - 但无论哪种方式,您肯定需要在某个地方使用 window
!
我不明白其中的错误。我正在尝试使用 std::function
s 将成员函数作为参数传递。除了第 4 种也是最后一种情况外,它工作正常。
void window::newGame() {
}
//show options
void window::showOptions() {
}
void window::showHelp() {
}
//Quits program
void window::quitWindow() {
close();
}
void window::createMenu() {
std::function<void()> newGameFunction = std::bind(&window::newGame);
std::function<void()> showOptionsFunction = std::bind(&window::showOptions);
std::function<void()> showHelpFunction = std::bind(&window::showHelp);
std::function<void()> quitWindowFunction = std::bind(&window::quitWindow);
}
std::function
的前 3 次用法没有错误,但在最后的用法中我得到以下信息:
Error 1 error C2064: term does not evaluate to a function taking 0 arguments
functional
第 1149 行。
我只知道错误发生在线上,因为我把其他所有的都去掉了,这是唯一一个导致各种组合出现问题的错误。
None 应该编译。成员函数很特殊:它们需要一个对象。所以你有两个选择:你可以用一个对象绑定它们,或者你可以让它们带一个对象。
// 1) bind with object
std::function<void()> newGameFunction = std::bind(&window::newGame, this);
// ^^^^^^
std::function<void()> showOptionsFunction = std::bind(&window::showOptions, this);
// 2) have the function *take* an object
std::function<void(window&)> showHelpFunction = &window::showHelp;
std::function<void(window*)> quitWindowFunction = &window::quitWindow;
后两者可以这样称呼:
showHelpFunction(*this); // equivalent to this->showHelp();
quitWindowFunction(this); // equivalent to this->quitWindow();
这最终取决于您对 function
的用例,您希望以何种方式进行操作 - 但无论哪种方式,您肯定需要在某个地方使用 window
!