首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

循环include,如何破

2013-09-22 
循环include,怎么破?代码示意如下:a.h:#pragma once#include b.hclass A {public:class AA {}B b}b.h

循环include,怎么破?
代码示意如下:
a.h:


#pragma once
#include "b.h"
class A {
public:
    class AA {
    };
    B b;
};


b.h:

#pragma once
#include "a.h"
class B {
    void f(A::AA* p);
}


编译告诉我,A不是有效的类名或命名空间。
[解决办法]
必须 前向声明Class
[解决办法]
A.cpp中 先
 class B;

b成员使用指针形式
[解决办法]
貌似看楼主写的

两个都想相互前置申明的吧!

嵌套类,一层一个::的访问

[解决办法]
a.h 里面包含b.h, 其他不变.
b.h

#pramma once

class AA;
class B

public:
  void f(AA *p);
};

  VS2008通过了,你试试。
  手机发的,不知道打错没。
[解决办法]
cpp里只包含A.h 我的能用
[解决办法]
头文件中用指针代替对象
[解决办法]
你为什么而定义AA.
如果你只是想只有AA能访问它,你可以把他设为私有。
如果你想其他文件的能访问它,你大可单独定义,A的公有局部类AA和他本身没有一毛钱的关系。
AA的名字只在当前作用域是可见的。
我能想到的能实现的方法只能是在A或当前作用域的类里面定义AA类型的成员,然后传给f函数。

[解决办法]
刚试了下,结果是:

  局部类只有在局部使用!
[解决办法]
未规范标准的错误
[解决办法]
//A.h

class B;
class  A
{
public:
class AA{}
B *pb;
}; 
//A.cpp
#include "A.h"
#include "B.h"
.....

//B.h
#include "a.h"
class B{
void f(A::AA* p); 
};
//B.cpp
#include "A.h"
#include "B.h"
.....


试一试这个
[解决办法]
a.h不用改!在b.h中在前面先声明A类!
6楼正解。

热点排行