为什么将枚举标记为已导出/已导入会破坏Doxygen生成?

4

我使用Doxygen时遇到了以下警告:

D:/<some/path>/Camera.h:20: warning: documented symbol `enum DLLPORT 
ct::CameraCapture::ct::CameraCapture::CamType' was not declared or defined.

现在我知道为什么Doxygen找不到那个类(命名空间显然是重复的),但我不理解为什么它甚至要搜索它。这个枚举在头文件中,直接在一个类定义的上面,而且该类也被成功找到,也不会生成双重命名空间。 源代码也编译通过了,所以可能不是语法错误导致Doxygen出现这些问题。 具体来说,源代码如下:

#ifdef CT_EXPORTS
#define DLLPORT __declspec(dllexport)
#else
#define DLLPORT __declspec(dllimport)
#endif

#include <somelibrary>

namespace ct {
namespace CameraCapture {

/**The type of camera used:
*[...]
**/
enum DLLPORT CamType {
    CT_ENUM1=0,
    CT_ENUM2,
    CT_ENUM3,
    CT_NONE
};

/**\brief A parent-class to cameras of all types.
*[...]
**/
class DLLPORT Camera
{
   //...some content...
};
}
}

同样的问题也会出现在其他枚举块中。 希望有些人知道发生了什么。 干杯。

你不需要使用 dllexport 或 dllimport 枚举。它们只是类型的声明,而不是代码的声明。只需使用 enum CamType 即可。 - WhozCraig
我很愿意将这标记为答案,因为它确实解决了我的问题。谢谢! - QuantumFlux
1个回答

13

你不需要dllexport或dllimport枚举。它们只是一种类型的声明,不是代码的声明。只需使用enum CamType即可。类(无论是整体还是成员)都需要它,独立的自由函数也需要它,但简单的枚举类型则不需要。


12
C++11的枚举类应该如何处理?它们需要标记为dllexport/dllimport吗? - Serge Rogatch
1
@SergeRogatch,你是否曾经弄清楚了一个作用域为enum的类型是否可以/应该从dll中导出? - WBuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接