1

可能重复:
C++ 将 char 转换为 const char*

我有一个代码片段:

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*”的无效转换”[-fpermissive]”。还会出现另一个错误:“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&) 的参数 1 [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]' [-fpermissive]|"。这些错误对我来说是如何引起的毫无意义。

4

2 回答 2

2

问题是,正如编译器有用地告诉我们的那样,您正在发送一个字符的地址,而对面的函数需要一个字符串。

  1. 首先让我们解决代码中的一些问题,如果函数有返回值,总是让函数返回一些其他情况。如果两个 if 条件都失败,你的相反函数会返回什么,考虑一下。也许你可以返回错误字符串或空字符串。这始终是一种简洁的编码风格。
  2. 其次,这是更关键的一点,为什么你有相反的函数接受一个字符串并返回一个字符串,而它实际上是接受一个字符并返回一个?
  3. 其他可能的问题是 chr 未初始化。这里 chr 的作用是什么?如果您可以纠正上述问题并澄清一点,我们可以为您提供帮助。
于 2012-12-31T18:02:37.567 回答
1

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;
}
于 2012-12-31T18:00:56.920 回答