葱葱那年丶 2019-01-10 17:47 采纳率: 100%
浏览 1181
已结题

c++ 头文件循环包含问题?

会产生编译错误:return type ‘class B’ is incomplete
a.h,A类是一个模板类:

#ifndef A_H
#define A_H
#include "b.h"

class B;
template <typename T>
class A
{
public:
    A(){}
    B print();
};

template <typename T>
B A<T>::print()
{
    B b;
    return b;
}

#endif // A_H

b.h

#ifndef B_H
#define B_H
#include "a.h"

class B
{
public:
    B();
    A<B> get();
};

#endif // B_H

b.cpp:

#include "b.h"

B::B()
{
}

A<B> B::get()
{
    return A<B>();
}

A通过print函数可以返回一个B的对象,B通过get函数可以获得A< B > 的对象。如何才能不报错?

  • 写回答

5条回答

  • _ZGq 2019-01-10 19:13
    关注

    在完整地定义一个类之前,即使有声明,也只能用指针或引用。

    评论

报告相同问题?