2017-05-14 36 views
0

我需要更多關於此消息的幫助:C++編譯錯誤(這個功能未初始化)

cmd_general.cpp:3433:警告: '安全模式' 可以在這個函數中使用未初始化的

somone可以解釋這個錯誤的含義嗎?

這是函數:

ACMD(do_cards) 
{ 
    const char *line; 

    char arg1[256], arg2[256]; 

    line = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)); 
    switch (LOWER(arg1[0])) 
    { 
     case 'o': // open 
      if (isdigit(*arg2)) 
      { 
       DWORD safemode; 
       str_to_number(safemode, arg2); 
       ch->Cards_open(safemode); 
      } 
      break; 
     default: 
      return; 
    } 
} 
+1

你沒有初始化聲明它並把它傳遞給函數。就編譯器而言,您將一個未初始化的變量傳遞給兩個函數,這些函數可能期望具有實際值的東西,因此它會警告您。易於修復,只需初始化您的變量。 –

+0

'safemode'在'str_to_number()'中被使用之前不會被分配一個值。你如何管理你的文件與大量'3k行代碼? –

+0

'str_to_number'的類型是什麼?什麼是3433線? – melpomene

回答

0

您聲明DWORD類型的變量沒有初始化它:

DWORD safemode; 

然後你將它傳遞給函數:

str_to_number(safemode, arg2); 

編譯器不知道第一個參數的初始值可能是沒有被函數使用,因此這裏不是一個真正的問題。

要解決的警告,只需用默認值初始化變量:

DWORD safemode = 0; 
+0

沒錯。非常感謝。 –

+1

另一種解決方案是修改'str_to_number'來返回返回值,而不是通過引用參數使用「返回」的破解 –