2017-09-16 48 views
0

分離類有一個主題 - Separating class code into a header and cpp file與嵌套類型爲頭文件和源

它描述瞭如何分離與變量和方法類的.h和.cpp

但它是一個簡單的。

說我有這個在main.cpp中

int main() { 
    class Filth { 
     int a, b; 
     void pra() { std::cout << a; } 
     class Frank { 

      int sacrifices; 

      void praisChinChin() { std::cout << "DARK LORD IS COMMINGGGGGG"; } 
     } 
    }; 
} 

,我如何寫這個類(污物)成的.h和.cpp,所以我不明白「未定義的引用」和任何其他錯誤?

它究竟如何工作(爲什麼我應該寫這個確切的代碼,它到底對我的程序有什麼作用)?

+0

對不起,你的縮進是可怕的,我希望這是因爲你在這裏發佈你的代碼時沒有注意(這是非常不可讀的)。 – Rakete1111

+0

ಠ_ಠ它沒有代碼段,應該有#include 作爲第一行。 ಠ_ಠ –

+1

標準C++不支持在函數中定義的'class'。可能是時候撣掉你最喜歡的C++教科書了。另外,儘量讓你的例子變得更薄弱。 – Bathsheba

回答

1
  1. frank.cpp

    #include "frank.h" 
    #include <iostream> 
    
    void Frank::praisChinChin() { 
        std::cout << "DARK LORD IS COMMINGGGGGG"; 
    } 
    
  2. frank.h

    #pragma once 
    
    class Frank { 
        int sacrifices = 0; 
        public: 
        void praisChinChin(); 
    }; 
    
  3. filth.cpp

    #include "filth.h" 
    #include <iostream> 
    
    void Filth::pra() { 
        std::cout << a; 
    } 
    
  4. filth.h

    #pragma once 
    
    class Filth { 
        int a = 0; 
        int b = 0; 
        void pra(); 
    }; 
    
  5. TEST.CPP

    ​​
+0

因此,這些類是分開的,我們有一個Frank類和一個Filth類,條件是Frank {} Flith {},但不是Flank {Filth {}}? –

+0

嗯,實際上這是一部分[我忽略了一半](https://stackoverflow.com/questions/46257804/separating-class-code-that-has-another-class-in-it-into-a-header-和CPP-文件/ 46258065?noredirect = 1個#comment79479719_46258072)。從你給出的代碼中,絕對沒有理由爲什麼'Filth'需要嵌套在'Frank'裏面,所以你通常不會那樣做。否則,你可以簡單地堅持:http://paste.ubuntu.com/25551674/ – sehe

+0

真正的感謝。這很有用,關於方法 - 每次我在.cpp中編寫定義時,我應該做void Class :: Class2 ...... :: Methodname(){}?或者有沒有辦法讓代碼看起來像我在main.cpp中創建的那樣(就像在例子中 - 類中的方法,這是另一個類,結構化的,每次我描述:: :: :: :: :: (寫實際的代碼)的方法是在一定的深度(in-classed)水平)?真的很感謝你。 –

1

你缺少在類弗蘭克的最後一個分號。 它應該在那之後編譯。

要將該類分離爲.h和.cpp文件,您應該使您的函數對於主函數不是本地函數。

頭文件可能看起來像這樣。

class Filth 
{ 
    int a, b; 
    void pra(); 

    class Frank 
    { 
     int sacrifices; 
     void praisChinChin(); 
    }; 
}; 

而且cpp文件

void Filth::pra() 
{ 
    std::cout << a; 
} 

void Filth::Frank::praisChinChin() 
{ 
    std::cout << "DARK LORD IS COMMINGGGGGG"; 
} 

int main() 
{ 
    return 0; 
} 

我不知道有關「爲什麼我應該寫確切的代碼」。但是目前你的代碼並沒有做任何事情。您需要創建類的對象並調用成員函數,因爲它具有任何實際效果。

+0

你錯過了很多關鍵機制。還有「應該看起來像」? 「可能看起來像」更有點 – sehe

+0

@sehe我同意。編輯。謝謝 – jumper0x08

+0

仍然 - 沒有顯示包括警衛或指令,沒有公開任何東西,沒有初始化非靜態數據成員等:)獲得嵌套類型的權利正確(我誤讀了) – sehe