2013-02-24 3 views
0

Я хочу преобразовать строку в класс данных, для этого я использую reference. Затем я пытаюсь использовать карту, чем следующий код. Но когда я пытаюсь скомпилировать это я получаюСтрока для типа данных класса

Сообщение об ошибке:

error: invalid conversion from 'std::map, void* (*)()>::mapped_type {aka void* ()()}' to 'void' [-fpermissive]

Код:

class C1 { 
public: 
    C1() { std::cout << "Object of class C1 created\n"; } 
    static void * create() { return (void*)new C1; } 
}; 

class C2 { 
public: 
C2() { std::cout << "Object of class C2 created\n"; } 
static void * create() { return (void*)new C2; } 
}; 

typedef void * (*fptr)(); 

int main() { 
    std::map<std::string, fptr> fpmap; 
    fpmap.insert(std::make_pair(std::string("C1"), C1::create)); 
    fpmap.insert(std::make_pair(std::string("C2"), C2::create)); 

    std::string classname; 
    std::cout << "Insert classname :" << std::flush; 
    std::cin >> classname; 

    void * obj = fpmap["C1"]; 
} 
+0

Надеюсь, у вас есть план, как освободить выделенную память и правильно уничтожить созданные объекты. –

ответ

4

вы имели в виду:

void * obj = fpmap["C1"](); 

Указатель функции непосредственно не конвертируемый до void*. Я хочу obj, чтобы указать на функцию, объявите ее как fptr. Если вы хотите вызвать функцию и указать obj, укажите, что она возвращает, вам нужно вызвать функцию (дополнительно ()).

+0

Или, предположительно, 'void * obj = fpmap [classname]();' – Johnsyweb

Смежные вопросы