簡體   English   中英

Inheritance 用於 class 具有相同名稱但不同命名空間 c++

[英]Inheritance for class with the same name but different namespace c++

是否可以從具有相同名稱但在不同命名空間中的 class 繼承以及如何實現?

例如我有以下結構:

   namespace general {
           namespace gui {
             struct GUI {

        };
   }}

我可不可以做:

 namespace proxy {
          namespace gui {
            struct GUI : general::gui::GUI {
    
          };
     }}

或者/應該有另一種方法來做到這一點(實際上命名 class / 結構不同)?

根據Pete 的 Becker評論進行更新。

它的當前結構方式是這樣的:

gui.h

    #include "world.h"
     
namespace general {
               namespace gui {
                 struct GUI {
    
            };
   }}

世界.h

namespace general {

    namespace world {

        struct World {};
}}

代理.h

 namespace proxy {
          namespace gui {
            struct GUI : general::gui::GUI {

          };
     }}

我的理解是編譯器查看 world.h,沒有找到 general::gui 並抱怨

proxy.h(17,30): error C2039: 'gui': is not a member of 'general'
world.h(4): message : see declaration of 'general'

如果我添加

namespace world {
    
            struct World {};
    }}

對於gui.h或其他方式,它很可能會起作用。 只是對我為什么需要這樣做感到困惑。

更新 2(帶有 .cpp 文件):

世界.cpp

#include "world.h"

namespace general {
    namespace world {
                    World{

gui.cpp

#include "gui.h"

namespace general {
    namespace gui {

代理.cpp

#include "proxy.h"

namespace proxy {
    namespace gui {

在 .cpp 文件方面,所有這些都只是包括其相應的 header 文件。 這是一般規則。

加上這里是(相關的)header 文件鏈,最肯定的問題出在哪里:

goal.h    includes      world.h and proxy.h
gui.h     includes      world.h and goal.h
menu.h    includes      goal.h
world.h - includes nothing
proxy.h - includes nothing

是的,這是可能的。 如果您遇到錯誤,則說明您的代碼中有一些您沒有在此處發布的內容,例如 using namespace 語句。

proxy::gui::GUIgeneral::gui::GUI是兩個完全不同的類。 兩者都以GUI結尾的事實根本說明不了什么。

class 的全名/全名始終是全名,包括命名空間。

這就是命名空間的意義所在。 它們的發明是為了防止不同庫之間的名稱沖突。 假設您有供應商“A”庫,其中包括 class GUI 想象一下,您想在自己的代碼中使用這個庫,您還定義了一個 class GUI 如果沒有命名空間,這些名稱會發生沖突,您將被迫重命名自己的 class 以使用該庫。

但是有了命名空間,一切都很好。 A::GUIyourcode::GUI或普通GUI不同。

所以

namespace general { namespace gui {
   class GUI {};
}}

namespace proxy { namespace gui {
   class GUI:public general::gui::GUI {};
}}

將/應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM