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

1 に答える 1

3

2つのC文字列を。で連結することはできません+

CおよびC++では、文字列リテラルは文字の配列であり、式で右辺値として使用されると、文字へのポインタに減衰します。C(およびC ++)では、ポインター演算を実行できます。つまり、ポインターから整数(または任意の整数型)を加算または減算でき、2つのポインターを減算して差を取得することもできますが、2つのポインターを一緒に加算することはできません。 。"A" + "B"2つ追加しようとするため、式は正しくありませんconst char*。これがコンパイラーが指示していることです。式"seta sv_hostname " + servernameが正しいためにservernameは、整数または列挙型のいずれかである必要があります。

C ++をコーディングする場合は、を使用できます。これには、別のまたはを取得するstd::stringオーバーロードがあり、メンバー関数を使用して、C文字列を必要とするインターフェイスで使用するを取得します。operator+std::stringconst char*c_strconst char*

于 2012-10-15T15:40:43.597 に答える