2013-07-17 2 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 Я подозреваю, что на первом месте он не может прочитать свой собственный код. –

ответ

9

Определения функций не входят в заголовок, поскольку он, естественно, приводит к умножению определенных символов.

Вы может боя это с помощью

  • static - маркировка объявления функции + определения как static сделает его локальным для ТОГО (ЕПА, т.е. cpp файла)
  • static inline
  • анонимного Пространства имен.
    вшита его с помощью unnames имен следующим образом: namespace { /*function definition*/ } также делает его локальным для ТУ
  • (hackishly), что делает его шаблон функции

Однако, я не рекомендую делать это, если не будет польза к нему. Вы должны начать беспокоиться об ODR (One-Definition-Rule), и поскольку вы должны были задать этот вопрос, я собираюсь предположить, что это немного превышает ваш опыт работы с языком.

+0

+1 Для объяснения, почему –

0

Вы не хотите включать определение функции в заголовок. Вы хотите поместить объявление функции в заголовок, например:

BOOL IsUserAdmin(VOID); 

Определение относится к некоторому исходному файлу.

+0

Можете ли вы объяснить, почему вы не хотите его в заголовке? –

Смежные вопросы