保持理智的c ++标头
|
我似乎在用c ++进行编码时遇到的最大问题是,必须先声明一个类,然后才能引用它。说我有两个这样的头文件...
头文件1.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);
}
};
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;
}
}
我想知道的是,有没有解决这些问题的优雅解决方案?在说c#和Java中,您不受此“线性”编译的限制。
没有找到相关结果
已邀请:
3 个回复
咳累录酬
悸翠疮武昏
埃庐
在这里,编译器将知道某个地方有一个Bar,但是它不知道它具有什么成员。 仅在CPP文件中使用\“使用命名空间xyz \\”,而不在标头中使用。 好了,这是您的示例代码,经过修改可满足这些规则。我只显示Hello类,因此将HelloPackage相应地分为头文件和CPP文件。 Hello.h(在您的示例中为Header1.h)
你好
可能出现的一个问题是,为什么需要包含字符串。您是否也只能向前声明字符串类? 区别在于您将字符串用作嵌入式成员,而不使用指向字符串的指针。可以,但是它会强制您使用#include,因为编译器必须知道字符串实例在Hello类中需要多少空间。