在不同的命名空间中定义基类和派生类时的编译错误

Posted

技术标签:

【中文标题】在不同的命名空间中定义基类和派生类时的编译错误【英文标题】:Compilation error when base and derived classes defined in separate namespaces 【发布时间】:2013-01-03 16:03:11 【问题描述】:

我已经在单独的命名空间中定义了基类和派生类(这是一个要求,因为可以从单个基类派生多个类,并且根据派生类的行为,它们将被放置在单独的命名空间中。)

Base.h

namespace global


    
    class Base
    
    public:
        Base();
        virtual ~Base();    

        virtual int someFunc(int arg1);
    


Derived.h

namespace global

    namespace derived
    

    class Derived: public Base()
    
    public:
        Derived();
        ~Derived();
       
    


Derived.cpp

namespace global

    namespace derived
    
    Derived::Derived() 
    Derived::~Derived() 

    int Derived::someFunc(int arg1)
    
    //some code here
    
    

当我尝试编译这段代码时,我得到了错误:

在 global::derived::Derived 类中没有声明 'int global::derived::Derived::someFunc(int arg1)' 成员函数。

那么,我需要在 Derived 中再次声明 someFunc 吗?

喜欢:

namespace global

    namespace derived
    

    class Derived: public Base()
    
    public:
        Derived();
        ~Derived();
        int someFunc(arg1 int);
       
    

现在,如果在一个完全独立的命名空间中有一些 Function 接受基类引用,我该如何传递它的派生类引用?

tryFunc(Base &b);

Derived d;
tryFunc(d);

这对吗?

谢谢。

【问题讨论】:

【参考方案1】:

你基本上已经想通了,你必须在派生类的类体中声明someFunc

同样传递给tryFunc(Base &b)的方式也是正确的

【讨论】:

以上是关于在不同的命名空间中定义基类和派生类时的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

构造虚拟基类时的编译器行为

为啥当我有两个函数时编译器没有显示错误,一个将基类作为参数,一个将派生类作为参数?

基类和派生类之间的同名函数处理方式

在两者中使用基类和派生类作为数组时的循环

C++学习21 基类和派生类的赋值

C++基类和派生类的构造函数