gpt4 book ai didi

c++ - 以成员函数为参数的结构

转载 作者:行者123 更新时间:2023-11-30 03:58:55 28 4
gpt4 key购买 nike

我是 C++ 和堆栈交换的初学者。我正在研究一个接口(interface)类,它获取键盘输入并通过循环结构数组来检查它是否正确,该数组包含要比较的字符串和要输出的字符串,具体取决于它是否等于比较字符串。如果输入正确,它将打印结构中的字符串,并调用结构中的函数并执行一些操作。

界面.hpp

#include <string>
class Input_Interface {
struct command_output {
std::string command;
std::string success_string;
std::string failure_string;
void output_function();
}

bool stop_loop = false;
void Clear();
void Quit_loop();

};

接口(interface).cpp

#include <iostream>
void Input_Interface::Quit_loop() {
stop_loop = true;
// ends loop and closes program
}

void Input_Interface::clear() {
// does some action
}

Input_Interface::command_output clear_output{"CLEAR", "CLEARED", "", Input_Interface::Clear()};
Input_Interface::command_output quit_output{"QUIT", "GOODBYE", "", Input_Interface::Quit_loop()};
Input_Interface::command_output output_arr[]{clear_output, quit_output};

void Input_Interface::begin() {
while (stop_loop == false) {
Input_Interface::get_input(); //stores input into var called input_str shown later
this->compare_input();
}
}

void Input_Interface::compare_input() {
for (unsigned int i=0; i<2; i++) {
if (this->input_str == output_arr[i].command) {
std::cout << output_arr[i].success_string << std::endl;
output_arr[i].output_function();
break;
}
}
// ... goes through else for failure printing invalid if it did not match any of the command string in the command_output struct array

我的问题是这些行

Input_Interface::command_output clear_output{"CLEAR", "CLEARED", "", Input_Interface::Clear()};
//error: call to non-static function without an object argument

Input_Interface::command_output quit_output{"QUIT", "GOODBYE", "", Input_Interface::Quit_loop()};
//error: call to non-static function without an object argument

我知道this 是通过类的成员函数传递的,但我不知道如何着手解决这个问题。我不太确定问题是否出在结构对象内部的范围解析运算符上,因为我可以在参数之外使用它。

如有任何帮助,我们将不胜感激。

最佳答案

你应该做如下所示的事情:

#include <string>
struct Input_Interface {
struct command_output {
std::string command;
void (*output_function)();
};

static void Clear();
static void Quit_loop();
};

int main() {
Input_Interface::command_output t = {"CLEAR", Input_Interface::Clear};
return 0;
}

Live example here

尽管我建议使用 functor object通过函数指针。

关于c++ - 以成员函数为参数的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com