Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)