【发布时间】:2011-05-27 09:00:03
【问题描述】:
我有一个带有虚拟方法的类定义。
在编译时,我收到'MethodType Class::Method' 不是 class Class
我找到的最流行的解决方案是在头文件的方法定义中添加关键字static。
但是,该方法被定义为virtual。因此,要添加 static 关键字,我必须删除 virtual 关键字。不幸的是,这不能完成,因为该类继承自该方法也声明为 virtual 的父类,从而导致另一个编译器错误。 (请注意,我使用的是已定义的接口,无法访问父类的源代码)
有人有什么想法吗?
头文件:
class X : public OtherClass
{
public:
X();
~X();
virtual structType MethodName(ParamType1,ParamType2);
};
然后在我的 CPP 文件中:
structType * X::MethodName(ParamType1 P1, ParamType2 P2)
{
//Implementation here
}
这会被标记为错误:
'structType* X::MethodName' is not a static member of 'class X'
【问题讨论】:
-
我们需要查看您的类定义。目前我不知道你在问什么。
-
这没有多大意义。如果您要覆盖的基函数是
virtual,那么从覆盖它的派生函数中删除关键字virtual确实not 会导致编译错误;事实上它什么也没做! -
你能提供一些代码吗?很可能您将方法称为静态方法,而不是实例方法。
-
"我发现最流行的解决方案是在头文件的方法定义中添加关键字 static。", "所以要添加 static 关键字,我必须删除 virtual 关键字。" - 请花时间学习这些关键字背后的概念,这些不是随机的开关来编译代码。
-
@Laurynas Biveinis:我理解关键字背后的概念,正如我所说,如果我删除“virtual”关键字,毫无理由我会得到另一个错误。 '由于基类中声明了虚拟方法,因此无法声明方法"
标签: c++ static-methods