为什么错误“从'char'无效转换为'const char *'?

时间:2012-12-31 17:51:30

标签: c++

  

可能重复:
  C++ convert char to 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&lt; _CharT,_Traits,_Alloc&gt; :: basic_string(const _CharT *,const _Alloc&amp;)的参数1 [与_CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'[-fpermissive] |“。这些错误对我来说没有任何意义。

2 个答案:

答案 0 :(得分:2)

问题是,正如编译器有用地告诉我们的那样,你发送的是一个字符的地址,其中相反的函数需要一个字符串。

  1. 首先让我们解决你的代码中的一些问题,如果函数有一个返回值,总是让函数返回其他情况。如果if条件都失败,你的对面函数会返回什么,想一想。也许你可以返回一个错误字符串或一个空字符串。这总是一个整洁的编码风格。
  2. 其次,这是一个更关键的一点,为什么你的函数相反接受一个字符串并返回一个字符串,当它实际上接受一个字符并返回一个字符串?
  3. 其他可能的问题是chr未初始化。这里chr的作用是什么? 如果你能纠正上述问题,并澄清一下,我们可以帮助你。

答案 1 :(得分:1)

string[index]返回一个字符而不是字符串

查看文档:{​​{3}}

试图解决它:

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