gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:54:28 27 4
gpt4 key购买 nike

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

我在我的项目中使用gnuplot-iostream.h,只有当我包含这个头文件时我才会面临这个冲突,否则没有冲突,代码构建完美。

基本上 gnuplot-iostream.h 正在调用 windows.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>
}

调用:

ABC::SIZE
PQR::SIZE

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

关于c++ - 如何解决头文件中的变量冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55822782/

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