3
#include<stdio.h>
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

class base {
 public:
    int lookup(char c);
}; // class base

int base::lookup(char c)
{
    cout << c << endl;
} // base::lookup

int main() {
    base b;
    char c = "i";
    b.lookup(c);
} // main

上記のコードをコンパイルすると、以下のエラーが発生します:

g++ -c test.cpp test.cpp: 関数 'int main()' 内: test.cpp:20:10: エラー: 'const char*' から 'char' への無効な変換 [-fpermissive]

4

3 に答える 3

22

交換してみる

 char c = "i";

 char c = 'i';
于 2012-08-19T12:45:57.850 に答える
12

"i"は文字ではなく、基本的に最初の要素へのポインターに減衰する文字配列です。

あなたはほぼ確実'i'に .

または、実際には複数の文字に基づいてルックアップが必要な場合があります。その場合、使用する必要"i"がありますが、その場合の型は、定義時とメソッド内の両方const char *で、単なるではありません。charcbase::lookup()

std::stringとはいえ、そうなると .C++型ではなくC++ 型を使うことを真剣に考えconst char *ます。必要ないかもしれませんが、実際の値をどの程度操作したいかによっては、C++ 文字列を使用すると作業が大幅に楽になる場合があります。

于 2012-08-19T12:46:08.557 に答える
10

"i"は文字列リテラルです。おそらく char リテラルが必要でした: 'i'.

文字列リテラルは null で終了する配列ですconst char(その式で使用すると暗黙的に変換されるchar const*ため、エラーが発生します)。

char リテラルは単なるcharsです

于 2012-08-19T12:45:42.997 に答える