免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3721 | 回复: 9
打印 上一主题 下一主题

当C结构互相嵌套的编译问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-09 21:49 |只看该作者 |倒序浏览
两个互相包含对方的结构如何通过编译??
代码如下:
struct A
{
      struct  B  * b;
}
struct   B
{
      struct  A  * a;
}
这段代码如何编译通过,当预编译struct A时找不到struct B。
假如把struct B放前面,预编译时又找不到struct A。
有没有办法让这些互相嵌套的结构编译通过

论坛徽章:
0
2 [报告]
发表于 2004-11-10 00:49 |只看该作者

当C结构互相嵌套的编译问题

  1. OS: Solaris8 x86
  2. GCC:gcc version 2.95.3 20010315 (release)
复制代码


下面程序编译通过:
  1. #include <stdio.h>;

  2. struct A
  3. {
  4.     struct B * b;
  5. };

  6. struct B
  7. {
  8.     struct A * a;
  9. };

  10. int main(void)
  11. {
  12.     struct A a;
  13.     struct B b;

  14.     a.b = NULL;
  15.     b.a = NULL;

  16.     return(0);
  17. }
复制代码


试过了,在TurboC 2 上也是没问题的。

论坛徽章:
0
3 [报告]
发表于 2004-11-10 09:22 |只看该作者

当C结构互相嵌套的编译问题

编写一个头文件,使其包含上面的结构体就可以了!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-11-10 17:30 |只看该作者

当C结构互相嵌套的编译问题

struct A *只是定义了一个指针,其实并不关心struct A是个什么东西,所以对编译而言没有问题。
这样就不行了:
struct A
{
struct B b;
}
struct B
{
struct A  a;
}

论坛徽章:
0
5 [报告]
发表于 2004-11-10 22:19 |只看该作者

当C结构互相嵌套的编译问题

忘了说了,这段代码是在linux里使用gcc编译。关键是两个结构互相嵌套。
我的编译环境是红帽子linux 9,使用光盘自带的g++编译器。这种定义的结构是不是只能依赖于编译器支不支持?有没有更好的解决办法?


  1. struct A
  2. {
  3.         B * b;
  4. }

  5. struct B
  6. {
  7.         A_ * a;
  8. }

  9. int main( )
  10. {
  11.         struct   A   a;
  12.         a.b = NULL;
  13.         return 0;

  14. }

复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-11-11 08:18 |只看该作者

当C结构互相嵌套的编译问题

原帖由 "stvsoft" 发表:
struct A
{
   B * b;
}

struct B
{
   A_ * a;
}

有没有搞错?这样也行?
应该是这样吧?

  1. struct A
  2. {
  3.     struct B * b;
  4. }

  5. struct B
  6. {
  7.      struct A * a;
  8. }

复制代码

论坛徽章:
0
7 [报告]
发表于 2004-11-13 20:40 |只看该作者

当C结构互相嵌套的编译问题

struct B
{
A * a
}
确实是打错了,发贴的时候不留神多了个下划线!不知道哪位大大们在linux下使用g++成功编译过。或者有解决这种嵌套声明的好办法。有时候不得不使用类似这样的嵌套申明的

论坛徽章:
0
8 [报告]
发表于 2004-11-13 21:35 |只看该作者

当C结构互相嵌套的编译问题

原帖由 "stvsoft" 发表:
两个互相包含对方的结构如何通过编译??
代码如下:
struct A
{
      struct  B  * b;
}
struct   B
{
      struct  A  * a;
}
这段代码如何编译通过,当预编译struct A时找不到struct B。
假如把struct .........
.

兄台,没有实际编译过?这样的声明,若是编译器搞不定,嘿嘿,编译器作者早就饿肚子了.
估计是漏了分号了吧.

论坛徽章:
0
9 [报告]
发表于 2004-11-13 21:42 |只看该作者

当C结构互相嵌套的编译问题

原帖由 "stvsoft" 发表:
struct B
{
A * a
}
确实是打错了,发贴的时候不留神多了个下划线!不知道哪位大大们在linux下使用g++成功编译过。或者有解决这种嵌套声明的好办法。有时候不得不使用类似这样的嵌套申明的

这个形式
  1. struct A
  2. {
  3. struct B * b;
  4. };
  5. struct B
  6. {
  7. struct A * a;
  8. };
复制代码

c&&c++编译器都应可通过.
这个形式
  1. struct B;
  2. struct A
  3. {
  4. B * b;
  5. };
  6. struct B
  7. {
  8. A * a;
  9. };
复制代码

C++编译可以通过,C不能通过[/code]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-11-14 11:43 |只看该作者

当C结构互相嵌套的编译问题

C不能通过是因为你在C中声明一个结构类型变量或指针时要有struct关键字.如:struct B b;而C++中不需要.
这个不是嵌套的意思.只是有一个指针变量而矣嘛.你直接来两个类声明就行了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP