我有这个头文件:

//region.hpp
#ifndef REGION_HPP
#define REGION_HPP
...
#include "spacepoint.hpp"

class Image;
//class SpacePoint;

class Region
{
    Rectangle<SpacePoint> boundaries;
...


它给出了这个错误

error: ‘SpacePoint’ was not declared in this scope


当我取消注释class SpacePoint时,我得到以下信息:

In instantiation of ‘class Rectangle<SpacePoint>’:
region.hpp:15:27:   required from here
rectangle.hpp:19:7: error: ‘Rectangle<T>::start’ has incomplete type


我试图用较小的测试程序重现该问题,但我不能。
我不知道如何解决这个问题。

最佳答案

感谢@Matteo的指导,我解决了这个问题。
使用this答案,我将doxygen配置为显示头文件依赖性。
这样更容易找到循环。
在不需要包含的地方,我删除了包含并添加了一个声明。
spacepoint.hpp的情况下,我有效地将#include <image.hpp>更改为class Image;

之前:

后:
(由于spacepoint.hpp不再依赖于image.hpp,因此该图较小)

关于c++ - 无法弄清楚如何解决类型依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19753752/

10-12 17:29