2012-10-15 60 views
0

夥計們我需要某人解決這個問題?當我編譯的代碼,我有這樣的錯誤:智能感知:表達式必須有整數或枚舉類型

Error: IntelliSense: expression must have integral or enum type 

我在這部分問題:

Console(0, V("seta sv_hostname " + servername + ";\n")); 

所以我怎麼能解決這個問題

if (strncmp(command, V("exec config_mp"), 14) == 0) 
{ 
    if (GAME_MODE == 'D') 
    { 
     CIniReader iniReader(V(".\\teknogods.ini")); 
     char *servername = iniReader.ReadString(V("Settings"),V("Servername"),""); 

     if (strcmp(servername,"") == 0) 
     { 
      info("Server name set to defult."); 
     } 
     else 
     { 
      //Console(0, V("seta scr_teambalance 1;\n")); 
      Console(0, V("seta sv_hostname " + servername + ";\n")); 
      info("server name set to: %s.", servername); 
     } 
    } 
} 
+0

你會想用適當的語言來標記它。也許C++? –

+0

是的語言是C++ – user1743737

回答

3

不能連接兩個C字符串與+

在C和C++中,字符串文字是字符數組,當用作表達式中的右值衰減爲指向字符的指針時。在C(和C++)中,您可以執行指針算術,這意味着您可以從指針添加或減去整數(或任何整型),也可以減去兩個指針以獲取差異,但不能將兩個指針相加。表達式"A" + "B"不正確,因爲這會嘗試添加兩個const char*。這就是編譯器告訴你的:對於表達"seta sv_hostname " + servername是正確的,servername必須是整數或枚舉。

如果編碼C++可以使用std::string,對此有過載operator+稱取任一另一std::stringconst char*然後使用c_str成員函數來檢索const char*在需要C字符串接口使用。

+0

謝謝,你能告訴我如何我可以將servername轉換爲整數或枚舉嗎? – user1743737

+0

@ user1743737:您無法將通用字符串轉換爲整數,也不希望這樣做。你不希望指針算術,但字符串連接。如果你想連接字符串,使用'std :: string',然後你可以連接:'std :: string msg =「...」; msg + = servername; msg + =「; \ n」;'。要獲得'const char *',你只需調用'c_str':'msg.c_str()'。現在取決於'Console'的期望,你可能能夠傳遞一個'std :: string',一個'const char *'或者他們兩個......但是不知道你使用的接口我不知道。 –

相關問題