C ++新手在这里。我目前有两个相互依赖的类。类别A构成类别B的数据成员,而类别B使用指向类别A的指针。
// main.cpp
#include "A.hpp"
// A.hpp
#pragma once
#include "B.hpp"
class A {
private:
const B obj;
};
// B.hpp
#pragma once
#include "A.hpp"
// forward declaration
class A;
using T = A;
class B {
private:
T* t_obj;
};
我的理解是,预处理器将首先输入A.hpp
,然后立即输入B.hpp
。由于A.hpp
,它将无法再次输入#pragma once
,并且将以B.hpp
继续。然后它将到达前向声明,因此class B
应该没问题。然后,A.hpp
将恢复,并且class A
应该没问题。
但是,我得到的编译错误是这样的:
./A.hpp:5: error: unknown type name 'B'
const B obj;
任何见识将不胜感激。谢谢。
答案 0 :(得分:0)
main.cpp
应该可以自己解释一下。但是,您在评论中提到自己有B.cpp
!?我的猜测是您引用的错误实际上是在B.cpp
而不是main.cpp
的编译期间发生的。如果B.cpp
包含B.h
,则预处理器将包含B.h
,后者将包含A.h
。并且A.h
将尝试包含B.h
,但是由于此时已经包含了B.h
,因此编译器将跳过由于#pragma once
而导致的包含,并且您输入了class A
却没有看到class B
的定义…