-2

bool を複数の .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 に対してローカルになります。
  • (ハック)関数テンプレートにする

ただし、メリットがない限り、これを行うことはお勧めしません。ODR (One-Definition-Rule) について心配し始める必要があり、この質問をしなければならなかったので、これは言語に関するあなたの経験を少し超えていると思います。

于 2013-07-17T19:03:43.583 に答える
0

関数定義をヘッダーに入れたくありません。次のように、関数宣言をヘッダーに入れたいとします。

BOOL IsUserAdmin(VOID);

定義は、いくつかのソース ファイルに入ります。

于 2013-07-17T19:03:47.570 に答える