IntelliSense:表达式必须具有整数或枚举类型

时间:2012-10-15 14:26:07

标签: c++ types enums expression integral

伙计们我需要有人解决这个问题吗?当我编译该代码时,我有这个错误:

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

1 个答案:

答案 0 :(得分:3)

您无法使用+连接两个C字符串。

在C和C ++中,字符串文字是字符数组,当在表达式中用作rvalue时会衰减为指向字符的指针。在C(和C ++)中,您可以执行指针运算,这意味着您可以从指针添加或减去整数(或任何整数类型),您也可以减去两个指针以获得差异,但是您不能将两个指针添加到一起。表达式"A" + "B"不正确,因为它会尝试添加两个const char*。这就是编译器告诉你的:要使表达式"seta sv_hostname " + servername正确,servername必须是整数或枚举。

如果编码C ++,您可以使用std::string,其中有超载的operator+可以使用其他std::stringconst char*,然后使用c_str成员函数检索要在需要C字符串的接口中使用的const char*