структура с функцией-членом в качестве параметра

Я новичок в 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

я знаю этот передается через функции-члены класса, но я не знаю, как решить эту проблему. Я не совсем уверен, является ли проблема в операторе разрешения контекста внутри объекта структуры или нет, потому что я могу использовать его вне параметров.

Любая помощь будет принята с благодарностью.

1

Решение

Вы должны сделать что-то, как показано ниже:

#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;
}

Живой пример здесь

Хотя я бы предложил использовать функторный объект над указателем на функцию.

2

Другие решения


По вопросам рекламы [email protected]