尝试将以下代码放入c ++标头中

时间:2013-07-17 19:01:08

标签: c++ header

我正在努力将类似的代码串放入标题中,以便多个.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);
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

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

可以使用

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

但是,除非有好处,否则我不建议这样做。你必须开始担心ODR(单一定义规则),因为你不得不问这个问题,我会假设这有点超出了你的语言经验。

答案 1 :(得分:0)

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

BOOL IsUserAdmin(VOID);

该定义进入了一些源文件。