我正在尝试用相互引用的成员编写2个类。我不确定我做错了什么,或者说这是不可能的。任何人都可以帮助我...
Source.cpp
#include "Headers.h"
using namespace std;
void main()
{
Network* network = new Network();
system("pause");
return;
}
Headers.h
#ifndef Headers_h
#define Headers_h
#include <iostream>
#include <vector>
#include "Network.h"
#include "Router.h"
#endif
Network.h
#include "Headers.h"
class Network
{
protected:
vector<Router> Routers;
};
Router.h
#include "Headers.h"
class Router
{
protected:
Network* network;
public:
};
我得到的错误是:
错误C2143:语法错误:缺少';'在'&lt;'之前 错误C2238:';'之前的意外标记 错误C4430:缺少类型说明符 - 假定为int。
我很确定我没有丢失任何分号或类似的东西。该程序可以找到我是否取出其中一个成员。我尝试找到类似的问题,解决方案是使用指针,但这就是我正在做的事情,它似乎并没有起作用!
答案 0 :(得分:4)
E.g。
<强> Source.cpp 强>
#include "Network.h"
// using namespace std; // bad idea unless it's a quickie test program
void main()
{
Network* network = new Network();
system("pause");
return;
}
<强> Network.h 强> #ifndef MY_NETWORK_H_INCLUDED #define MY_NETWORK_H_INCLUDED
#include "Router.h"
#include <vector>
using std::vector;
// even better is:
// typedef std::vector<Router> t_RouterVec;
// t_RouterVec routers;
class Network
{
protected:
vector<Router> Routers;
};
#endif // MY_NETWORK_H_INCLUDED
<强> Router.h 强>
#ifndef MY_ROUTER_H_INCLUDED
#define MY_ROUTER_H_INCLUDED
class Network;
class Router
{
protected:
Network* network;
public:
};
#endif MY_ROUTER_H_INCLUDED
非常糟糕的想法 我认为这是一种气味。你让每个人都包括一切。现在,每次在Network.h或Router.h中更改内容时,都必须重新编译(并且最好重新测试)所有内容!
#ifndef Headers_h
#define Headers_h
#include <iostream>
#include <vector>
#include "Network.h"
#include "Router.h"
#endif
答案 1 :(得分:4)
第一个错误 - 您需要显式使用命名空间:
std::vector<Router> Routers;
不要“使用namespace std;”在头文件中
其他错误源自第一个:)
对于后面定义的类的引用,你需要做Router类的前向声明,把
class Router;
进入您的Network.h
答案 2 :(得分:1)
您需要在向量前添加std::
前缀。您的另一个选择是将using namespace std;
放在该文件的顶部。
std::vector<Router> Routers;
或
using namespace std;
...
vector<Router> Routers;
答案 3 :(得分:0)
编译问题:
请在Network.h中添加std :: before
请根据标准更正main返回一个整数。
循环参考:
Network.h
引用类Router
作为其向量内容和Router.h引用
班Network
。这是鸡蛋和鸡蛋的情景。你不能兼得:)。
要解决此问题,我建议如下:
在Router.h中添加一个不透明的类引用网络。
由于Router.h
使用指向网络的指针,因此无需了解网络的详细信息,只需要知道网络是一个类。
类网络;
将Headers.h
中包含指令的顺序更改为
#include“Router.h”
#include“Network.h”