invalid conversion from ‘const char*’ to ‘char*’の対処
例えば以下のようなクラスを定義して、インスタンスを生成しようとするとコンパイラ時にinvalid conversion from ‘const char*’ to ‘char*’といったエラーがでる。
class A { private : char *name; public : A(char *name); } A::A(char *name) { this->name = name; }
これは、参考リンクによれば、引数にconstを付ければ解決するようだ。しかし、コンストラクタ内でメンバ変数に値を代入しようとすると、今度はinvalid conversion from ‘const char*’ to ‘char*’といったエラーが出てコンパイルできない。なので、以下のように修正する。
A::A(const char *name) { this->name = const_cast<char*>name; }
ここによると、const_castを用いて、constを無効にすれば解決する。しかし本来消させないという意図があってconst宣言しているのにもかかわらずconstを無効化することはよろしくないということは理解できますが、constじゃないメンバ変数に代入する場合はこうするしかないのでしょうか..ちょっとまだ納得しきれていないので、もう少し勉強します。