C++,可以在两个头文件中有两个同名的联合
一个系统中有两个头文件,我需要包括这两个头文件以便与系统交互,这两个头文件是agentRegistrationUnion和counterCollectUnionContent.h,这两个头文件只包含两个联合,但这两个联合具有相同的名称,唯一的区别是工会的内容,工会看起来是这样的:C++,可以在两个头文件中有两个同名的联合,c++,include,unions,C++,Include,Unions,一个系统中有两个头文件,我需要包括这两个头文件以便与系统交互,这两个头文件是agentRegistrationUnion和counterCollectUnionContent.h,这两个头文件只包含两个联合,但这两个联合具有相同的名称,唯一的区别是工会的内容,工会看起来是这样的: union SIGNAL { struct s1 ss1; struct s2 ss2; ...... }; 我无法更改这些头文件,当我包含这些头文件时,我遇到了一个错误:重
union SIGNAL
{
struct s1 ss1;
struct s2 ss2;
......
};
我无法更改这些头文件,当我包含这些头文件时,我遇到了一个错误:重新定义“联合信号”,如何在代码中同时包含这两个联合
我的头文件:
#include <vector>
#include <map>
#include <string>
#include <stdint.h>
#include "agentRegistrationUnion.h" //I only want to separate these two files
#include "counterCollectUnion.h"
using namespace std;
class InvalidSig;
struct args{
InvalidSig* context;
string mname;
union SIGNAL *content;
};
class InvalidSig{
public:
InvalidSig();
~InvalidSig();
void Send_inval_sig();
void Kill_proc();
bool InitAttacker(char *argv);
void LocateVictims();
itc_msg* AllocMsg(union SIGNAL *content);
void PrintVictims(itc_mbox_id_t vic);
void *sendmsg(void *mname);
static void *sendmsg_helper(void *ar){
string n = ((args*)ar)->mname;
return ((args*)ar)->context->sendmsg(&n);
};
multimap<string,string> mboxes;
union SIGNAL *content;
};
在agentRegistrationUnion.h中:
在联合中。h:
在使用过程中,通过在名称空间前加前缀来引用所需的联合:
Agent::SIGNAL signal;
signal.ss1 = ...;
如果您无法更改这些头文件,那么这应该可以:
namespace Agent {
#include "agentRegistrationUnion.h"
}
namespace Counter {
#include "counterCollectUnion.h"
}
Agent::SIGNAL agentSignal;
Counter::SIGNAL counterSignal;
在agentRegistrationUnion.h中:
在联合中。h:
在使用过程中,通过在名称空间前加前缀来引用所需的联合:
Agent::SIGNAL signal;
signal.ss1 = ...;
如果您无法更改这些头文件,那么这应该可以:
namespace Agent {
#include "agentRegistrationUnion.h"
}
namespace Counter {
#include "counterCollectUnion.h"
}
Agent::SIGNAL agentSignal;
Counter::SIGNAL counterSignal;
您可以使用以下小技巧更改联合的名称,而无需修改标题: 定义信号CCUCSIGNAL 包括 未定义信号
然后,您可以将counterCollectUnionContent.h中的联合称为CCUCSIGNAL,而另一个仍为SIGNAL您可以使用以下小技巧更改联合的名称,而无需修改标题: 定义信号CCUCSIGNAL 包括 未定义信号
你可以参考反汇编中的联合作为.CUCUCK,而另一个仍然是信号< /P>为什么不把这两个标题放在不同的命名空间中?@保罗,好,我是C++的新手,我会挖出来怎么做,谢谢。@ PaulR,请你写下答案,如何做,在我的头文件里,我只想把这些部分分开,所有其他代码都应该共享。看起来MatthewMoss已经处理了这个问题。为什么不把这两个标题放在不同的命名空间中?@保罗,好,我是C++的新手,我会挖出来怎么做,谢谢。@ PaulR,请你写下答案,如何做,在我的头文件里,我只想把这些部分分开,所有其他代码都应该共享。看起来@MatthewMoss已经解决了这个问题。OP说他们无法更改这些头文件。感谢您的回答,我无法更改这两个头文件,我想我需要在头文件中创建名称空间,其中包括这两个头文件。编辑了我的答案。。。您应该能够使用名称空间包装include指令,但这可能在某种程度上取决于标题的内容。OP表示他们无法更改这些标题。感谢您的回答,我无法更改这两个标题文件,我想我需要在包含这两个头文件的头文件中创建名称空间。编辑我的答案。。。你应该能够用名字空间来包装包含指令,但是这可能取决于头文件的内容。宏是一个很差的解决方案。-名字空间对C++来说更有意义。我同意名字空间是C++中的首选解决方案。*,但是如果你不能编辑标题,并且包装包含指令就行不通了。这是一个很好的解决方案。对于C++,NAMSPESPACE更为合理。我同意名称空间是C++中的首选解决方案。*,但是,如果不能编辑头文件并包装包含指令将不起作用,那么这是一个选项。