可能重复:
C++将字符转换为常量字符*
我有一个代码片段:
string opposite(string c)
{
if(c == (string) """){return """;}
if(c == (string) "<"){return ">";}
throw;
}
int load_end(int start, string code)
{
//start is the begining of "header.h" or <header> in #load "header.h" or #load <header>
//code is self explanitory
//This function returns the end of "header.h" or <header> in #load "header.h" or #load
string chr = " ";
int e;
string asdf = opposite(code[start]);
for(int i = start; chr == asdf; i++)
{
e = i;
chr = code[i];
}
return e;
}
在定义单词"asdf"的行中,出现错误;"从'char'到'const-char*的转换无效"[-fpermission]"。还会发生另一个错误:"c:\mingw\bin。。\lib\gcc\mingw32\4.6.2\include\c++\bits\basic_string.tcc|214|错误:初始化'std::basic_string<_CharT,_Traits,_Alloc>::basic_string(const_CharT*,const_Alloc&
问题是,正如编译器有益地告诉我们的那样,您正在发送一个字符的地址,而相反的函数需要一个字符串。
- 首先,让我们解决代码中的一些问题,如果函数有返回值,那么总是让函数为其他情况返回一些东西。如果两个if条件都失败,你的反向函数会返回什么?想想看。也许你可以返回一个错误字符串或一个空字符串。这总是一种简洁的编码风格
- 第二,这是一个更关键的问题,当函数实际接收一个字符并返回一个字符时,为什么要使用相反的函数来接收一个字符串并返回字符串
- 其他可能的问题是chr未初始化。chr在这里的角色是什么?如果你能纠正以上问题,并澄清一点,我们可以帮助你
string[index]
返回的是一个字符,而不是字符串
查看文档:http://www.cplusplus.com/reference/string/string/operator%5B%5D/
尝试修复它:
char opposite(const char c)
{
if(c == '<')
{
return '>';
}
return c; // (c == '"') { return '"'; }
}
int load_end(int start, string code)
{
//This function returns the end of "header.h" or <header> in #load "header.h" or #load <header>
char chr = 0;
for(int i = start; chr == opposite(code[start]); i++)
{
chr = code[i];
}
return 0;
}