У меня проблемы с исправлением проблемы. У меня есть два класса. Один из них называется MenuBar, в этом классе есть векторный массив другого объекта (MenuOption). MenuBar содержит метод, который создает новый MenuOption и добавляет его в массив. Конструктору MenuOption нужны два аргумента: строка (для имени) и функция (действие, выполняемое этой опцией). Я хочу, чтобы полученная функция была такой формы:Функция с объектом в качестве аргумента, как аргумент другой функции
void method (SDL_Surface * arg1, MenuBar * arg2);
Поэтому я исправил проблему двойного включения, добавив «class MenuBar;» сразу после моего #include "MenuBar.h". Но у меня все еще есть ошибка, она говорит «ошибка: неверное использование выражения void» в строке I, помеченной в приведенном ниже коде main.cpp.
Теперь мой полный код выглядит следующим образом:
main.cpp
void connect(SDL_Surface* arg1, MenuBar* arg2);
void about(SDL_Surface* arg1, MenuBar* arg2);
int main()
{
SDL_Surface* screen;
MenuBar menu(/*initialization*/);
menu.addOption("Connect",connect(screen,&menu));//<---------
menu.addOption("About",about(screen,&menu)); //<---------
}
void connect(SDL_Surface* arg1, MenuBar* arg2)
{...}
void about(SDL_Surface* arg1, MenuBar* arg2)
{...}
MenuBar.h
#include "MenuOption.h"
class MenuBar
{
public:
...
void addOption(string optionName,void (*f)(SDL_Surface*, MenuBar*));
private:
vector<MenuOption> optionList;
}
MenuBar.cpp
void MenuBar::addOption(string optionName,void (*f)(SDL_Surface*, MenuBar*))
{
MenuOption tempOption(optionName,f);
optionList.push_back(tempOption);
}
MenuOption.h
#include "MenuBar.h"
class MenuBar;
class MenuOption
{
public:
MenuOption(string optionName,void (*f)(SDL_Surface*, MenuBar*));
void (*run)(SDL_Surface*, MenuBar*);
private:
string name;
}
MenuOption.cpp
MenuOption::MenuOption(string optionName,void (*f)(SDL_Surface*, MenuBar*))
{
name = optionName;
run = f;
}
Спасибо за помощь!
Philou231
Wow! Теперь это очень много, спасибо. Он работает отлично. Я запутался, потому что не помню, что у меня была эта функция запуска, и эта функция должна была получить параметры. – Philou231