我正在努力将类似的代码串放入标题中,以便多个.cpp文件可以使用bool。将此添加到我的程序后我遇到了问题并希望得到一些帮助。
以下是代码:
BOOL IsUserAdmin(VOID)
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if(b)
{
if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
{
b = FALSE;
}
FreeSid(AdministratorsGroup);
}
return(b);
}
感谢您的帮助。
答案 0 :(得分:9)
函数定义不属于标题,因为它自然会导致多重定义的符号。
你可以使用
解决这个问题static
- 将函数声明+定义标记为static
将使其成为TU的本地(翻译单元,即cpp
文件)static inline
namespace { /*function definition*/ }
也使它成为TU的本地名称但是,除非有好处,否则我不建议这样做。你必须开始担心ODR(单一定义规则),因为你不得不问这个问题,我会假设这有点超出了你的语言经验。
答案 1 :(得分:0)
您不希望将函数定义放入标题中。您希望将函数声明放入标题中,如下所示:
BOOL IsUserAdmin(VOID);
该定义进入了一些源文件。