-2

我正在努力将类似的代码字符串放入标题中,以便多个 .cpp 文件可以使用布尔值。将其添加到我的程序后,我遇到了编译问题,并希望得到一些帮助。

这是代码:

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);
}

谢谢您的帮助。

4

2 回答 2

9

函数定义不属于标题,因为它自然会导致多重定义的符号。

可以使用

  • static- 将函数声明+定义标记为staticTU 本地(翻译单元,即cpp文件)
  • static inline
  • 匿名命名空间。
    像这样用一个 unnames 命名空间封闭它:namespace { /*function definition*/ }也使它成为 TU 本地的
  • (hackishly)使其成为功能模板

但是,除非有好处,否则我不建议这样做。您必须开始担心 ODR(单一定义规则),并且由于您必须提出这个问题,我将假设这超出了您对语言的经验。

于 2013-07-17T19:03:43.583 回答
0

您不想将函数定义放入标题中。您想将函数声明放入标题中,如下所示:

BOOL IsUserAdmin(VOID);

定义进入某个源文件。

于 2013-07-17T19:03:47.570 回答