2013-07-17 31 views
-2

我正在努力將一個類似的代碼串放入一個頭文件中,以便bool可以被多個.cpp文件使用。添加到我的程序後,我正在編譯問題,並希望得到一些幫助。試圖將下面的代碼放入一個C++頭文件

下面是代碼:

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

謝謝您的幫助。

+1

你有什麼「問題」? – Borgleader

+4

首先正確地縮進你的代碼 –

+1

@Borgleader我懷疑他首先不能讀自己的代碼。 – 2013-07-17 19:03:38

回答

9

函數定義不屬於標題,因爲它自然會導致多重定義的符號。

可以打擊這種使用

  • static - 標誌着函數聲明+定義爲static將使本地的TU(翻譯單元,即cpp文件)
  • static inline
  • 匿名命名空間。
    由unnames命名空間括起來,像這樣:namespace { /*function definition*/ }也使得當地的TU
  • (hackishly)使其成爲一個功能模板

不過,我不建議這樣做,除非有一個好處到它。你不得不開始擔心ODR(單一定義規則),因爲你必須提出這個問題,所以我會假設這有點超出了你的語言體驗。

+0

+1爲了解釋爲什麼 –

0

您不想將函數定義放入標題中。您想將函數聲明放入標題中,如下所示:

BOOL IsUserAdmin(VOID); 

定義進入某個源文件。

+0

你能解釋爲什麼你不想在頭文件中使用它嗎? –

相關問題