Wayly.baye & Just Wayly
Where is the Wayly
|
首页
|
发新随笔
|
发新文章
|
|
|
管理
随笔:11 文章:0 评论:8 引用:0
C++ 中的循环引用 引发的错误
近日,我写了一个语音聊天的程序, 不同的类型声明在不同的文件中,全局变量及符号全部集中在一个文件中 。
下面是文件结构 :
1
//
main.cpp
2
3
#
include "id.h" //全局符号和变量
4
#
include "sock.cpp" //我封装的类
5
#
include "wave.cpp"
6
7
int main()
8
{
9
.
10
}
11
12
13
//
id.h
14
15
#
ifndef _id_h
16
#
define _id_h
17
18
#
include "sock.cpp"
19
20
#
define ID_xxxxx xxxxxx
21
22
Socket gClient;
23
..
24
25
#
endif
26
27
28
//sock.cpp
29
30
#
ifndef _sock_cpp
31
#
define _sock_cpp
32
33
#
include "id.h"
34
35
class
Socket
36
{
37
.
38
};
39
40
XXXX(XXX
,
ID_XXXXX
,
..
);
41
42
#
endif
43
44
45
46
编译时的顺序是
main.h ->id.h ->| #define _id_h
#include "sock.cpp"
|-> sock.cpp ->|
#include "id.h"
//_id_h 已定义
// 忽略所有#ifndef #endif 中的变量和符号声明
XXXX(XXX,ID_XXXXX,.....) //发生错误
// 编译器报错 `ID_XXXX' undeclared (first use this function)
经过多次修改我发现还没有办法修正这样的错误,(除非你愿意写上十行extern int ......),
没办法只能main.h 中声明所有的变量 去掉id.h 中对Socket 变量的声明。
终于编译通过!
不知看这篇文章的你,是否有办法解决这种循环引用时的产生的问题,我们一起讨论!!
发表于 2007-11-09 20:53
Wayly.baye
阅读(1434)
评论(1)
编辑
收藏
引用
所属分类:
编译器
评论
#
re: C++ 中的循环引用 引发的错误
id.h里去掉#include "sock.cpp",把
Socket gClient; 改成
class Socket;
Socket* gpClient;
即可,这叫前置声明。
使用的gpClient的cpp文件中同时包含id.h和sock.cpp(虽然后者也包含了id.h,但gpClient事实上在id.h,这样显式包含能让程序更清晰,反正有剔除机制防止重复包含),即可使用到Socket类实现。
另外,应该把声明和实现分类(除了涉及模板的不好这么写外),不要写#include"xxx.cpp"的代码。头文件才是用来包含的。
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Dev-C++ 的一些高级用法
解决 令人生厌的 multiple definition of
C++ 中的循环引用 引发的错误
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
公告
C plus plus Java( J2EE , IoC , Spring , Struts2 .. ) Ruby on Rails ...
常用链接
我的随笔
我的评论
我参与的随笔
随笔分类
Web(2)
(rss)
编译器(3)
(rss)
工具集
(rss)
文章分类
WinSock
(rss)
编译器
(rss)
Blog
长高的小孩
(rss)
拉拉博客
搜索
最新评论
1. re: 某网游及外挂破解手记[未登录]
你是高手吗,是的话请帮我破解一款已经没在运营的网游数据包好吗
加过密的
--...