读书人

小弟我在CB XE里的一个C++定义和操作

发布时间: 2013-07-09 09:50:47 作者: rapoo

我在CB XE里的一个C++定义和操作,总是编译错误,请高人指点,多谢多谢。
我有一个操作,需要添加很多类的pfn到一个queue中,顺次执行。于是有如下定义:
类:
头文件:
class TfrmTest : public TForm
{
//...
typedef void(TfrmTest::*PFNTEST)(void);
std::queue<PFNTEST> pfnQue;
};

源文件:
void TfrmTest::pfnTest1(void)
{
}


void __fastcall TfrmTest::btnStartTestClick(TObject *Sender)
{
pfnQue.push(this->pfnTest1);}
//---------------------------------------
可是编译的时候在红色行处提示:E2034: Cannot convert 'void (*(_closure)()()'to'void(TFrmTest::*)();想问一下各位大侠,我定义的PFNTEST类型和我传递到Q里的类型不一致么?我怎么看怎么是一致的呢?

.


[解决办法]
改成 pfnQue.push(&TfrmTest::pfnTest1); 试试

[解决办法]

引用:
Quote: 引用:

改成 pfnQue.push(&TfrmTest::pfnTest1); 试试
嗯,这样改过之后的确可以了,多谢。但是POP出来后再次使用就错,代码如下:
{
if(!pfnQue.empty())
{
PFNTEST pfnTest = pfnQue.front();
pfnTest(); pfnQue.pop();
}
}
编译时红色部分提示:E2314 Call of nonfunction。对C++实在不熟,高手帮忙解答一下吧。


你的使用是在类的成员函数里面, this 就是 TfrmTest* 的话:

(this->*pfnTest)();

读书人网 >C++

热点推荐