динамическое связывание — прямое объявление в переполнении стека

Моя программа состоит из двух основных частей. Первый — это определение класса c ++ в DLL, второй — основная программа. После загрузки каждой DLL в базовую программу класс Proxy заполняет описание класса в структуре данных в базовой программе, что решается с помощью ключевого слова «extern».

У меня проблема с порядком объявления с сообщениями об ошибках.
в строке кода: «typedef map method_map;» 1. ошибка: «прокси» не был объявлен в этой области
2. ошибка: аргумент шаблона 2 недопустим в строке кода:

typedef common_object *maker_t();
extern map< string, maker_t* > factory;//This method_map is used to store all the method structure data of each class
//method: class_name, method_name, function pointer
//I got two errors here:
//1. "ERROR: ‘proxy’ was not declared in this scope"//2. "ERROR: ‘error: template argument 2 is invalid"typedef map<string, proxy::method> method_map;
//this class_map contain the methods description for each class.
//this class_map is declared in the core program.
//after the class in this dll is loaded on the core program,
//it would automatically fill its descriptino in here
extern  map<string, method_map> class_map_;

// our global factory
template<typename T>
class proxy {
public:
typedef int (T::*mfp)(lua_State *L);
typedef struct {
const char *class_name;
const char *method_name;
mfp mfunc;
} method;

proxy() {
std::cout << "circle proxy" << endl;
// the loop for filling the methods information of the class T
method_map method_map_;
for (method *m = T::methods;m->method_name; m++) {
method m1; //specific information about each method
m1.class_name = T::className;
m1.method_name = m->method_name;
m1.mfunc = m->mfunc;
method_map_[m1.method_name] = m1; //assign m1 into the method map
}
//Assign methods description of the T class into the class_map
class_map_[T::class_name] = method_map_;
}
};

Я надеюсь увидеть ваши советы по этой проблеме. Спасибо!

1

Решение

method_map а также class_map_ нужно будет вкладывать внутрь proxy (или некоторый другой шаблон), так как они зависят от другого вложенного типа (method), что, в свою очередь, зависит от параметра шаблона.

Если они этого не сделали (например, если proxy класс, а не шаблон), то их нужно будет объявить после proxy для того, чтобы использовать типы, объявленные там.

1

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

вперед определить / объявить class proxy; до typedef map<string, proxy::method> method_map;

вот так:

    template<class T>
class proxy;
typedef map<string, proxy::method> method_map;
0

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