具有相互引用成员的c++类
C++ classes with members referencing each other
我正试图编写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:语法错误:在'<'之前缺少';'
错误C2238:在';'前面的意外标记
错误C4430:缺少类型说明符-假设为int。
我很确定我没有漏掉任何分号或类似的东西。如果我取出其中一个成员,程序就会运行。我试着找到类似的问题和解决方案是使用指针,但这就是我正在做的,它似乎不工作!
第一个错误-您需要显式使用名称空间:
std::vector<Router> Routers;
不要在头文件中"使用命名空间std;"
其他错误来自于第一个:)
对于后面定义的类的引用,你需要做Router类的forward声明,putclass Router;
- 使用正向声明
。
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
您需要用std::
作为向量的前缀。您的另一个选择是将using namespace std;
放在该文件的顶部。
std::vector<Router> Routers;
或
using namespace std;
...
vector<Router> Routers;
编译问题:
-
请在Network.h
-
请根据标准更正main返回整数
循环引用:
Network.h
引用了Router
类的向量内容和Router.h引用Network
类。这是一个先有鸡还是先有蛋的问题。你不能两者兼得:).
要解决这个问题,我建议如下:
-
在Router.h.
中添加不透明类引用Network由于
类网络;Router.h
使用一个指向Network的指针,它不需要知道Network的细节,它只需要知道Network是一个类。 -
更改
Headers.h
中include指令的顺序为# include"Router.h"
# include"Network.h"
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 我们可以访问一个不存在的联盟的成员吗