如何解决 C++ 中的 typedef 重定义?

Posted

技术标签:

【中文标题】如何解决 C++ 中的 typedef 重定义?【英文标题】:How to solve typedef redefinition in C++? 【发布时间】:2015-07-15 01:15:56 【问题描述】:

我在我的项目中导入了一些代码,但是有一行: typedef signed char byte;

但是byte 已经在rpcndr.h 中被typedef。使用这种类型的代码很多,因此仅更改名称是一件困难的事情。我想知道是否有一种简单的方法可以解决这种重新定义?

附:我的代码是在 Windows 上运行的,所有代码都没有命名空间,所以添加命名空间就等于更改类型名称。

【问题讨论】:

也许看看命名空间? 根据我的经验,byteBYTE 几乎总是用于无符号字符 @MattMcNabb 是在unpack200使用的,所以不知道改成unsigned char能不能用。 好的,据我了解,您有两个独立的库,它们都声明了一个字节类型定义? 您确定需要这两个文件吗?尝试将#define WIN32_LEAN_AND_MEAN 放在包含之前。 【参考方案1】:

尝试在包含之前添加:#define WIN32_LEAN_AND_MEAN。

What does #defining WIN32_LEAN_AND_MEAN exclude exactly?

【讨论】:

【参考方案2】:

您可以将 typedef 包装在命名空间中。

namespace Foo

    typedef signed char byte;


namespace Bar

    typedef signed char byte;

然后像Foo::byte; Bar::byte;一样使用它

Why and how should I use namespaces in C++?

【讨论】:

把代码中用到的所有字节都改成带命名空间的字节也是一样的。 我不确定你的意思,如果你不能修改那里的代码,你不需要命名其他 typedef。只需 typedef 您自己的,以便您可以使用 namespace::typedef 访问它

以上是关于如何解决 C++ 中的 typedef 重定义?的主要内容,如果未能解决你的问题,请参考以下文章

C++中typedef是啥意思啊

C++中的typedef和using

C++开发之using定义模板别名

C++开发之using定义模板别名

C++开发之using定义模板别名

typedef见解即如何定义一个数组指针