【发布时间】:2018-06-04 08:37:50
【问题描述】:
#include <iostream>
class virtualClass{
public:
virtual int a() = 0;
};
class UnknownImplementation : public virtualClass{
public:
int a() override { return 1;}
};
class myFramework {
public:
int c(int (virtualClass::*implementedFunc)(void)){
implementedFunc();
return 2;
}
};
int main(){
//some user implements the virtual class and calls myFramework function
myFramework* mfp = new myFramework();
std::cout << mfp->c(&(UnknownImplementation::a)) << std::endl;
}
您好,我正在开发一个框架,该框架应该调用已实现的虚函数并使用它。它类似于上面的代码。 我得到的编译错误是:
testVirtual.cpp:在成员函数'int myFramework::c(int (virtualClass::)())'中:testVirtual.cpp:16:19:错误:必须使用'.'或者 ‘->’ 在 ‘implementedFunc (...)’ 中调用指向成员函数的指针, 例如'(... -> 已实现的Func) (...)' 已实现的Func(); ^ testVirtual.cpp:在函数“int main()”中:testVirtual.cpp:24:47:错误:非静态成员的使用无效 函数‘virtual int UnknownImplementation::a()’ std::cout c(&(UnknownImplementation::a))
如何解决这些问题? 提前致谢!
传递已实现类的实例并调用函数有效。
【问题讨论】:
-
最好传递
UnknownImplementation的对象并在myFramework::c内调用virtualClass的相应函数。因为virtualClass的每个实现都会定义可以从myFramework::c中调用的函数。这称为命令模式。 -
行了,谢谢
标签: c++ compiler-errors virtual