gpt4 book ai didi

windows - C++/命令行界面 : Public ref struct generates C2011: 'class' type redefinition

转载 作者:可可西里 更新时间:2023-11-01 12:24:57 24 4
gpt4 key购买 nike

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

枚举.h:

#pragma once
...
public ref struct ManagedStruct {
Bitmap^ image;
}
...

此 header 被 DLL 中的另一个类和单独的可执行文件引用。单独的托管结构正在生成:

error C2011: 'ManagedStruct' : 'class' type redefinition.

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

我已经检查了所有必要的包含和 namespace ,并尝试了明显的标题保护,但无济于事;我仍然收到错误。

非常感谢您的任何见解!

最佳答案

当您使用托管代码时,您必须对传统的 C/C++ 头文件进行去调优。类型声明的主要来源是程序集元数据。这与 native C/C++ 编译模型非常不同,在 native C/C++ 编译模型中,您必须为您让其他模块可见的类型创建一个头文件。

我猜测您在 EXE 项目中遇到了这个 C2011 错误。在你们都添加了对 DLL 项目程序集的引用的地方(就像你们应该做的那样)并且在头文件中使用了#include。就像你不应该那样。这是一个有保证的重复定义,#pragma once 不能解决这个问题。

不要将头文件用于导出的类型定义。始终使用程序集引用。

关于windows - C++/命令行界面 : Public ref struct generates C2011: 'class' type redefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com