0

我已阅读以下 SO 问题:

但是,关于静态方法以及 Visual-c++ 和 gcc 之间的区别,我有一个稍微不同的问题。

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

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 中解决它而不对我的代码进行根本性的改变?

4

1 回答 1

0

好的,给出的答案(在我有机会评论/接受之前被删除)让我明白解决方案是多么简单(或者换句话说,我的问题是多么愚蠢:))

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

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() {}
于 2012-05-17T09:58:32.500 回答