我的程序包含兩個主要部分。第一個是DLL中的C++類定義,另一個是核心程序。在每個DLL加載到核心程序後,代理類將填充類描述到核心程序中的數據結構中,這通過使用關鍵字「extern」來解決。C++中的前向聲明
我得到了一個聲明順序問題錯誤消息。代碼行中的 :「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_;
}
};
我希望能看到你的建議這個問題。非常感謝!
非常感謝。我試圖在類代理中聲明class_map_,但是由於class_map_的聲明中出現了錯誤,所以聲明瞭關鍵字「extern」,它不能放在類中。你能否提供一些其他建議?我希望很快看到你的回覆。 – khanhhh89