将具有嵌套类型的类分隔为标题和源

时间:2017-09-16 19:41:56

标签: c++ class header

有一个主题 - 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"; }
        }
    };
}

如何将这个类(Filth)编写成.h和.cpp,这样我就得不到&#34;未定义的引用&#34;和任何其他错误?

它究竟是如何工作的(为什么我应该编写这个确切的代码,它对我的​​程序究竟做了什么)?

2 个答案:

答案 0 :(得分: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

    #include "frank.h"
    
    int main() {
        Frank f;
        f.praisChinChin();
    }
    

答案 1 :(得分: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;
}

我不确定&#34;我为什么要编写确切的代码&#34;。但目前你的代码并没有真正做任何事情。您需要创建类的对象并调用成员函数,以使其具有任何实际效果。