2017-09-16 19 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