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

您不能将两个 C 字符串与+.

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

如果编写 C++ 代码,您可以使用std::string,其中有重载operator+,它采用另一个std::stringconst char*然后使用c_str成员函数检索 aconst char*以在需要 C 字符串的接口中使用。

于 2012-10-15T15:40:43.597 回答