循环include,如何破
循环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楼正解。