C++/CLI:Public ref struct生成C2011:'class'类型重定义

T3d*_*b0t 15 windows dll c++-cli visual-c++

我在托管DLL项目中有一个头文件,如下所示:

Enums.h:

#pragma once
...
public ref struct ManagedStruct {
    Bitmap^ image;
}
...
Run Code Online (Sandbox Code Playgroud)

此标头既可以从DLL中的另一个类引用,也可以从单独的可执行文件引用.仅托管结构生成:

错误C2011:'ManagedStruct':'class'类型重定义.

如果我将结构移动到DLL中的主头文件它可以正常工作,并且是公共可访问的,所以这就是我正在做的事情,但我非常想知道为什么当我将它移动到另一个文件时发生这种情况.

我检查了所有必要的包含和名称空间并尝试了明显的标题保护,但无济于事; 我仍然得到错误.

非常感谢您的任何见解!

Han*_*ant 33

在使用托管代码时,您必须重新调整传统的C/C++头文件.类型声明的主要来源是程序集元数据.这与本机C/C++编译模型非常不同,在本机C/C++编译模型中,您必须具有可用于其他模块的类型的头文件.

我猜你在EXE项目中得到了这个C2011错误.你们都添加了对DLL项目程序集的引用(就像你应该这样),在头文件中使用了#include.就像你不应该.这是一个有保证的重复定义,#pragma曾经不能解决这个问题.

不要将头文件用于导出的类型定义.始终使用装配参考.