伙计们我需要有人解决这个问题吗?当我编译该代码时,我有这个错误:
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 :(得分:3)
您无法使用+
连接两个C字符串。
在C和C ++中,字符串文字是字符数组,当在表达式中用作rvalue时会衰减为指向字符的指针。在C(和C ++)中,您可以执行指针运算,这意味着您可以从指针添加或减去整数(或任何整数类型),您也可以减去两个指针以获得差异,但是您不能将两个指针添加到一起。表达式"A" + "B"
不正确,因为它会尝试添加两个const char*
。这就是编译器告诉你的:要使表达式"seta sv_hostname " + servername
正确,servername
必须是整数或枚举。
如果编码C ++,您可以使用std::string
,其中有超载的operator+
可以使用其他std::string
或const char*
,然后使用c_str
成员函数检索要在需要C字符串的接口中使用的const char*
。