error: invalid conversion from 'const char*' to 'char' の原因と直し方
ダブルクォートで囲んだ1文字("A"など)をchar型の変数に代入しようとしたときに出るエラーです。ダブルクォートは何文字であっても文字列(const char*)を作り、char型とは互換性がありません。
エラーメッセージの読み方
main.cpp:3:18: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
main.cpp- ファイル名
3- 行番号
18- 列番号 — この位置でg++が構文解析に失敗しました
invalid conversion from 'const char*' to 'char' [-fpermissive]- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 #include <iostream> 2 int main() { 3 char grade = "A"; ^ 4 std::cout << grade << std::endl; 5 return 0; 6 }
main.cpp:3:18: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
"A"は1文字であっても文字列(const char*)です。char型に代入するにはシングルクォートの'A'を使う必要があります。
直し方: "A" を 'A' にします。
広告
広告スロット(未設定)
パターン2
1 #include <iostream> 2 int main() { 3 char initial = "K"; ^ 4 std::cout << initial << std::endl; 5 return 0; 6 }
main.cpp:3:20: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
ダブルクォートの文字列はポインタ型なので、char型の変数にそのまま代入することはできません。
直し方: "K" を 'K' にします。
パターン3
1 #include <iostream> 2 int main() { 3 char sign = "+"; ^ 4 std::cout << sign << std::endl; 5 return 0; 6 }
main.cpp:3:17: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
記号1文字であっても、ダブルクォートで囲むと文字列になりchar型には代入できません。
直し方: "+" を '+' にします。
よくある誤解
「1文字だけならダブルクォートでもシングルクォートでも同じ」というのは誤解です。C++では見た目の文字数に関わらず、"A"は文字列(ポインタ)、'A'は文字(整数値)という別の型として扱われます。
まとめ
error: invalid conversion from 'const char*' to 'char'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。