Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将附加参数传递到第一个参数为函数指针的函数中_C++_Function_Oop_Pointers - Fatal编程技术网

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我已经在我的问题中添加了相关代码。如果我没有包括足够的代码,请让我知道,我会添加必要的。非常感谢。