如何解决头文件中的变量冲突?

2024-04-10

我正在 OpenSees(一个主要用 Visual Studio C++ 编写的开源地震工程模拟项目)中编写自适应步长更新算法。我面临两个不同头文件中具有相同名称的两个变量之间的冲突(即windef.h and 钢Z01.h)。我需要一种方法来解决这个冲突。

我在用gnuplot-iostream.h在我的项目中,只有当我包含此头文件时,我才会遇到此冲突,否则不存在冲突,代码构建完美。

基本上gnuplot-iostream.h正在打电话窗口.h,进一步调用windef.h。我在steelz01.h文件中添加了include gauards,但它没有解决问题。

当我将 Steelz01.h 中的 varaibale 名称更改为其他名称时,代码也完美构建。未发现问题。但是,我不想更改 Steelz01 中变量的名称,它会产生严重的影响。

我包括这样的头文件

#include "gnuplot-iostream.h"
#include <SteelZ01.h>

这就是 Steelz01 中变量 SIZE 的定义方式

#define LOOP_NUM_LIMIT               30
const int SIZE = LOOP_NUM_LIMIT; //limit of array number

在windef.h中,它是这样定义的

typedef struct tagSIZE
{
    LONG        cx;
    LONG        cy;
} SIZE, *PSIZE, *LPSIZE;

typedef SIZE               SIZEL;
typedef SIZE               *PSIZEL, *LPSIZEL;

Visual Studio 2017 抛出此错误,

1>c:\program files (x86)\windows kits\8.1\include\shared\windef.h(190): error C2378: 'SIZE': redefinition; symbol cannot be overloaded with a typedef

1>e:\phd working folder\0_ops_github\src\material\nd\reinforcedconcreteplanestress\steelz01.h(17): note: see declaration of 'SIZE'

我期待有一种方法来解决这个冲突并成功构建。


我建议你将 include 语句放在命名空间中,

namespace ABC
{
    #include "gnuplot-iostream.h"
}

namespace PQR
{
   #include <SteelZ01.h>
}

Call:

ABC::SIZE
PQR::SIZE

这不会更改现有库的任何代码。然而,使用通用名称的库的作者因此建议他将通用名称保留在名称空间下以减少任何冲突。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决头文件中的变量冲突? 的相关文章

随机推荐

  • Laravel 4 + AJAX 不工作

    我对 Laravel 4 很陌生 我正在尝试测试 AJAX 请求 In my script js我有这个 function login submit click function e e preventDefault return ajax
  • Ruby 模型的数组属性

    是否可以为数组类创建一个属性 我尝试阅读this https stackoverflow com questions 3438827 ruby model with an array as an attribute但我并没有从中得到太多 我
  • 无法在真实设备上的 iOS 10 上运行 Appium 测试

    自从将我的设备和 xCode 更新到 iOS 10 和 Xcode 8 以来 我一直无法在真实设备上成功设置 Appium 测试 不过 我在模拟器上运行得很好 以下是我的功能设置 DesiredCapabilities cap new De
  • Rails 表单动态添加字段

    我正在尝试设置一组字段以根据需要动态显示 在模型中 我有以下字段 attr accessible instruct1 instruct2 instruct30 我希望表单只显示 instruct1 并带有一个按钮来添加 1 个字段 直到击中
  • 在 Apex 类中引用远程站点设置 URL?

    我有一个 webservice 类 它将位于托管包中并分发给多个客户端 该类当前有一个变量 其中包含它所访问的服务器的硬编码值 问题 每个客户端的服务器都不同 因此硬编码值不起作用 我认为由于每个客户端都必须将其服务器添加到其远程站点设置中
  • 如何比较 MySQL 数据库模式 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一个可以让我比较 MySQL 数据库模式的工具 哪个是最好的工具来做到这一点 Navicat 能够为您做到这一点 它还将同步两个 mysql
  • AES加密/解密

    以下是一些适用于字符串的代码 Public Function AESEncrypt ByVal PlainText As String ByVal Password As String ByVal salt As String Dim Ha
  • 如何在“git Push”之后在本地和远程撤消“git commit”

    我已经表演过git commit随后是一个git push 如何在本地和远程存储库上恢复该更改 git log commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8 Author Michael
  • 开源 Twitter 克隆(在 Ruby/Python 中)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何用 Ruby 或 Python 编写的生产就绪的开源 Twitter 克隆 我对功能丰富的实现
  • 如何备份 Django 数据库

    我有一个使用 Postgres 数据库的 Django 应用程序 我需要能够备份和恢复数据库 既确保没有数据丢失 又能够在测试期间将数据从生产服务器复制到开发服务器 似乎有几种不同的方法可以做到这一点 只需直接与数据库交互即可 因此 对于
  • CKEditor 如何在取消帖子时删除服务器中的图像文件

    我正在使用nodeJS 后端 react 前端 mongoDB 我安装了 CKEditor5 以便在船上发布许多图像 它可以完美地在我的服务器文件夹上上传图像CKfinder But 如果有人停止发布上传的图像 无用的图像将保留在我的服务器
  • 警告:远程 HEAD 引用不存在的引用,无法结帐

    由于不同原因 这似乎是一个常见的错误 我有一个简单的裸 git 存储库 名为 kiflea git 我像这样克隆它 git clone git kipdola be kiflea git 然后 git 告诉我 warning remote
  • Mockito 3 any() 严格存根参数不匹配

    我正在使用 Mockito 3 1 0 我正在尝试用以下语法模拟我的方法 when mockedObject myMethod any HttpServletRequest class thenReturn 1 myMethod很简单 pu
  • 如何在 Strawberry Perl 中更改@INC?

    我该如何改变 INC永久地 而不改变我的脚本 在 Strawberry Perl 中 我知道 I 但不想每次都调用该开关 要添加路径 请将环境变量 PERL5LIB 设置为这些路径 注意 这将影响您运行的所有 Perl 安装 操作方法 右键
  • Task.FromResult() 与 Task.Run()

    我最近遇到过不少情况async方法同步执行 但无论如何都会返回一个任务 因此可以等待它们 例如 public virtual Task CreateAsync TUser user ThrowIfDisposed if user null
  • File.isFile() 返回错误结果? [复制]

    这个问题在这里已经有答案了 public class Test public static void isFile System out println new File D a log isFile public static void
  • 为什么不能在构造函数中实例化该类的同一对象?

    public class Run public static void main String args A a1 new A class A public A A a new A here as well A a new A 为什么这给出
  • 链表相对于数组有什么优点,反之亦然?

    请解释一下链表相对于数组的优点是什么 与链表相比 使用数组有什么优点吗 问候 舒阿布 两者都存储元素序列 但使用不同的技术 An array将元素按连续顺序存储在内存中 即如下所示 item 1 item 2 item 3 item x h
  • node_modules/@firebase/firestore/dist/index.d.ts:27:28 中出现错误 - 错误 TS1005:预期为“]”

    我尝试将 firebase 包含到我的角度应用程序中 我导入了所有内容 但是当我运行时ng serve我收到此错误 ERROR in node modules firebase firestore dist index d ts 27 28
  • 如何解决头文件中的变量冲突?

    我正在 OpenSees 一个主要用 Visual Studio C 编写的开源地震工程模拟项目 中编写自适应步长更新算法 我面临两个不同头文件中具有相同名称的两个变量之间的冲突 即windef h and 钢Z01 h 我需要一种方法来解