В моем классе есть частная структура, которая содержит атрибуты пунктов меню. одним из этих атрибутов является указатель на функцию. Кажется, что то, что я написал, работает, когда я пересылаю объявления функций вне класса, но определение функций вне класса кажется очень плохой практикой.
#pragma once
#include <string>
//forward declaration outside the class
void completelyRandom();//does not throw error
class Menu
{
private:
typedef void(*Menu_Processing_Function_Ptr)();
struct MenuItem
{
unsigned int number;
const char * text;
Menu_Processing_Function_Ptr p_processing_function;
};
MenuItem menu[] =
{
{1, "Completely random", completelyRandom}
};
public:
Menu();
~Menu();
};
А вот код, который выдает ошибку, но ближе к тому, что, я надеюсь, возможно:
#pragma once
#include <string>
class Menu
{
private:
typedef void(*Menu_Processing_Function_Ptr)();
struct MenuItem
{
unsigned int number;
const char * text;
Menu_Processing_Function_Ptr p_processing_function;
};
MenuItem menu[1] =
{
{1, "Completely random", completelyRandom}
};
public:
Menu();
//declaration within the class
void completelyRandom();//does throw error
~Menu();
};
Я попытался переместить объявление полностьюRadom () по всемуОбласть меню, но появляется ошибка
a value of type "void (Menu::*)()" cannot be used to initialize an entity of type "Menu::Menu_Processing_Function_Ptr"
Есть ли способ, которым я могу переслать объявление функции, которая будет соответствовать передовым методам? Или я должен сожалеть о своем неудачном выборе дизайна и начинать все сначала?