C++ 将附加参数传递到第一个参数为函数指针的函数中
假设我们有一个带有公共成员函数的类C++ 将附加参数传递到第一个参数为函数指针的函数中,c++,function,oop,pointers,C++,Function,Oop,Pointers,假设我们有一个带有公共成员函数的类VirtualGridDriver: static CString AddTask(void (*proc)(VGridTaskParam parameters, CString str), VGridTaskParam parameters, CString str); static void runJob(VGridTaskParam parameters, CString str); 此外,假设我们有一个带
VirtualGridDriver
:
static CString AddTask(void (*proc)(VGridTaskParam parameters, CString str),
VGridTaskParam parameters, CString str);
static void runJob(VGridTaskParam parameters, CString str);
此外,假设我们有一个带有公共成员函数的类CSchedulerDlg
:
static CString AddTask(void (*proc)(VGridTaskParam parameters, CString str),
VGridTaskParam parameters, CString str);
static void runJob(VGridTaskParam parameters, CString str);
请注意,类VGridTaskParam
包含将任务添加到队列中所需的一些参数
在我的main()
源代码中,我可以编写并成功运行函数调用:
VirtualGridDriver::AddTask(&CSchedulerDlg::runJob, parameters, m_strConnection);
我只想将一个附加参数传递到VirtualGridDriver::AddTask
,如下所示:
VirtualGridDriver::AddTask(&CSchedulerDlg::runJob, parameters, m_strConnection, x);
其中x是一个int
请注意,将在main()作用域中实例化的额外整数()被传递到上述函数中。我对更改VGridTaskParam
类不感兴趣
如果有任何不清楚的地方,请发表评论。我将快速添加其他信息。
更新:我已经按照评论中的建议完成了操作,但现在我发现了一个错误。 这就是我所改变的: 在VirtualGridDriver中,我现在拥有:
static CString AddTask(void (*proc)(VGridTaskParam parameters, CString str, int x), VGridTaskParam parameters, CString str, int x);
static void runJob(VGridTaskParam parameters, CString strConnection, int x);
在CSchedulerDlg
中,我现在有:
static CString AddTask(void (*proc)(VGridTaskParam parameters, CString str, int x), VGridTaskParam parameters, CString str, int x);
static void runJob(VGridTaskParam parameters, CString strConnection, int x);
我从这些更改中得到的错误是:
错误LNK2001:未解析的外部符号“public:static class std::basic_of stream>CSchedulerDlg::impFl”(?impFl@CSchedulerDlg@@2V?$basic_ofstream@DU?$char_traits@D@std@@@std@@A)
通常,此错误是因为在.cpp文件中找不到函数定义,但我有如下错误:
void CSchedulerDlg::runJob(VGridTaskParam parameters, CString strConnection, int x) {// do stuff}
通过这些更改,我应该能够调用该方法,如下所示:
int x = 1;
VirtualGridDriver::AddTask(&CSchedulerDlg::runJob, parameters, m_strConnection, x);
但是,我仍然收到前面提到的错误消息 只需将参数添加到
AddTask
方法,或为其提供重载。我不明白是什么问题。您需要在VirtualGridRiver中重载函数AddTaskclass@bolov我尝试过这样做,但得到了错误:错误LNK2001:未解析的外部符号“public:static class std::basic_of stream CSchedulerDlg::impFl”。有什么想法吗?@Pii没有看到产生错误的代码,no@bolov我已经在我的问题中添加了相关代码。如果我没有包括足够的代码,请让我知道,我会添加必要的。非常感谢。