c ++,是否可能在不同的头文件中有两个同名的联合
c++, is that possible to have two unions with the same name in different header files
一个系统中有两个头文件,我需要包含这两个头文件才能与系统交互,这两个头文件是agentRegistrationUnion
和counterCollectUnionContent.h
,这两个头文件files 没有什么特别的,只有两个 union,但这两个 union 有相同的名字,唯一的区别是 unions 的内容,unions 看起来像这样:
union SIGNAL
{
struct s1 ss1;
struct s2 ss2;
......
};
我无法更改这些头文件,当我包含这些头文件时,我得到了 error: redefinition of 'union SIGNAL'
,如何在我的代码中同时拥有两个联合?
我的头文件:
#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
中:
namespace Agent { // or some appropriate name
union SIGNAL { ... };
}
在counterCollectUnion.h
中:
namespace Counter { // or some appropriate name
union SIGNAL { ... };
}
在使用过程中,通过命名空间前缀引用想要的联合:
Agent::SIGNAL signal;
signal.ss1 = ...;
如果您不能更改这些头文件,那么这应该可行:
namespace Agent {
#include "agentRegistrationUnion.h"
}
namespace Counter {
#include "counterCollectUnion.h"
}
Agent::SIGNAL agentSignal;
Counter::SIGNAL counterSignal;
您可以使用以下小技巧在不修改 header 的情况下更改联合的名称:
#define SIGNAL CCUCSIGNAL
#include <counterCollectUnionContent.h>
#undef SIGNAL
那你可以把counterCollectUnionContent.h里面的union称为CCUCSIGNAL,另外一个还是SIGNAL
一个系统中有两个头文件,我需要包含这两个头文件才能与系统交互,这两个头文件是agentRegistrationUnion
和counterCollectUnionContent.h
,这两个头文件files 没有什么特别的,只有两个 union,但这两个 union 有相同的名字,唯一的区别是 unions 的内容,unions 看起来像这样:
union SIGNAL
{
struct s1 ss1;
struct s2 ss2;
......
};
我无法更改这些头文件,当我包含这些头文件时,我得到了 error: redefinition of 'union SIGNAL'
,如何在我的代码中同时拥有两个联合?
我的头文件:
#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
中:
namespace Agent { // or some appropriate name
union SIGNAL { ... };
}
在counterCollectUnion.h
中:
namespace Counter { // or some appropriate name
union SIGNAL { ... };
}
在使用过程中,通过命名空间前缀引用想要的联合:
Agent::SIGNAL signal;
signal.ss1 = ...;
如果您不能更改这些头文件,那么这应该可行:
namespace Agent {
#include "agentRegistrationUnion.h"
}
namespace Counter {
#include "counterCollectUnion.h"
}
Agent::SIGNAL agentSignal;
Counter::SIGNAL counterSignal;
您可以使用以下小技巧在不修改 header 的情况下更改联合的名称:
#define SIGNAL CCUCSIGNAL
#include <counterCollectUnionContent.h>
#undef SIGNAL
那你可以把counterCollectUnionContent.h里面的union称为CCUCSIGNAL,另外一个还是SIGNAL