首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从基类静态方法调用派生类静态方法

从基类静态方法调用派生类静态方法
EN

Stack Overflow用户
提问于 2012-05-17 09:17:10
回答 1查看 1.9K关注 0票数 0

我读过以下问题:

但是,对于静态方法和Visual++与gcc的区别,我有一个稍微不同的问题。

我有一个类,它捆绑了一些与给定任务相关的静态方法。我希望实现每个方法的一个简单版本,并允许在将来实现更有效的实现。为此,我实现了基类中的所有方法,并调用了派生类中的方法。这样,具有“更新”实现的方法将隐藏“旧”实现。我的问题是,当一个方法g()调用另一个方法f()时,我想验证是否调用了派生类中的实现(如果存在的话)。我不能使用虚拟方法,因为我的方法都是静态的。在visual-c++中,下面的代码正在执行我刚才描述的代码,但是gcc不会编译-实际上,我很惊讶visual-c++编译了OK。(我需要我的代码在这两个程序上编译)

代码语言:javascript
复制
struct Base {
    static void f () {}
    static void g () { Derived::f(); } //--- visual-c++ compiles ok; gcc: "'Derived' was not declared in this scope"
};
struct Derived : public Base {
    static void f () {}
};

Derived::g ();

我的问题是,为什么visual-c++不是在抱怨,我如何在gcc中解决它而不对我的代码进行彻底的修改?

EN

回答 1

Stack Overflow用户

发布于 2012-05-17 09:58:32

好吧,给出了一个答案(在我有机会发表评论/接受之前就删除了),这让我明白了解决方案有多简单(换句话说,我的问题有多愚蠢:)

我所要做的就是将声明与实现分开(这都是在一个h文件中完成的--我知道,这是一个永久的“临时”解决方案)。

代码语言:javascript
复制
struct Base {
    static void f ();
    static void g ();
};

struct Derived : public Base {
    static void f();
};

int main() {
        Derived::g ();
        return 0;
}

void Base::f () {}

void Base::g () { Derived::f(); } 

void Derived::f() {}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10632841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档