1

重複の可能性:
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<_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 条件が失敗した場合、反対の関数は何を返しますか、考えてみてください。エラー文字列または null 文字列です。これは常に適切なコーディング スタイルです。
  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 に答える