c ++标题保持理智

Kel*_*ton 1 c++ header include

我在c ++中编写代码时遇到的最大问题是你必须在引用它之前声明一个类.说我有这样的两个头文件...

那么header1.h

#include "Header2.h"
#include <deque>
#include <string>
#include <iostream>
using namespace std;
class HelloPackage;
class Hello
{
public:
    string Message;
    HelloPackage * Package;
    Hello():Message("")
    {

    }
    Hello(string message, HelloPackage * pack)
    {
        Message = message;
        Package = pack;
    }
    void Execute()
    {
        cout << Message << endl;
        //HelloPackage->NothingReally doesn't exist.
        //this is the issue essentially
        Package->NothingReally(8);
    }
};
Run Code Online (Sandbox Code Playgroud)

Header2.h

#include "Header1.h"
#include <deque>
#include <string>
#include <iostream>
using namespace std;
class HelloPackage
{
public:
    deque<Hello> Hellos;
    HelloPackage()
    {
        Hellos = deque<Hello>();
    }
    int AddHello(string Message)
    {
        Hellos.push_back(Hello(Message,this));
    }
    void ExecuteAll()
    {
        for each(Hello h in Hellos)
            h.Execute();
    }
    int NothingReally(int y)
    {
        int a = 0;
        a += 1;
        return a + y;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是,有没有优雅的解决方案来处理这些问题?比如c#和java,你不受这种"线性"编译的限制.

fil*_*set 5

  1. 使用标题包括"#ifndef/#define/#endif"或"#pragma once"
  2. 将代码放在.cpp中,而不是标题中的内联
  3. ???
  4. 利润

这对您有用的原因是因为您可以使用您想要引用的类的前向声明,而不包括文件,如果您愿意的话.