首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我在CB XE里的一个C++定义和操作,总是编译异常,请高人指点,谢谢谢谢

2013-07-09 
我在CB XE里的一个C++定义和操作,总是编译错误,请高人指点,多谢多谢。我有一个操作,需要添加很多类的pfn到

我在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)();

热点排行