質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

2752閲覧

「char」で宣言して変数があるコードのエラーについて

On-You

総合スコア12

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/07/17 08:49

「猫でも分かるプログラミング」というサイトを使って勉強しているものです。
添付したリンク先のコードを記述しコンパイルするとエラーをはいてしまいます。

エラー内容及び解消方法についてご教示ください。
「char」として宣言している部分を「const char」として書き換えれば上手くいくかと思い
リンク先のコードから多少変更しておりますが、いまだうまくいっていない状態でございます。
(変更後のほうがエラーの数は減りましたが。。。)

下記コードを入力し「sample.cpp」で保存

PowerShell上で「g++ sample.cpp」と入力し実行

するとエラーをはいてしまいます。

【参照にしたサイト】
http://www.kumei.ne.jp/c_lang/cpp/cpp_09.htm

【コード】

C++

1#include <stdio.h> 2#include <string.h> 3 4class Cat{ 5 int leg; 6 char body_siza[32]; 7 char kind_of_cat[32]; 8public: 9 char cat_name[32]; 10 Cat(char *kind); 11 12 void show(const char *name); 13}; 14 15Cat::Cat(char *kind) 16{ 17 strcpy(kind_of_cat,kind); 18 leg=4; 19 if(!strcpy(kind,"メイン・クーン")) 20 strcpy(body_siza,"大型"); 21 else{ 22 if(!strcpy(kind,"アメリカン・ショート・ヘア")) 23 strcpy(body_siza,"小型"); 24 else 25 strcpy(body_siza,"不明"); 26 } 27} 28 29inline void Cat::show(const char *name) 30{ 31 printf("%sは、%sという種類の猫で足は%d本あります。\n" 32 "また、この猫の体型は%sです。\n",name,kind_of_cat,leg,body_siza); 33 return; 34} 35 36int main(void) 37{ 38 Cat MaineCoon("メイン・クイーン"); 39 Cat American_Short("アメリカン・ショート・ヘア"); 40 Cat House_Hold("家庭猫"); 41 MaineCoon.show("マイケル"); 42 American_Short.show("ポチ"); 43 House_Hold.show("タマ"); 44 return 0; 45 46}

【エラー内容】
sample.cpp: In function 'int main()':
sample.cpp:38:37: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Cat MaineCoon("???C?“?E?N?C?[?“");
^
sample.cpp:39:52: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Cat American_Short("?A?????J?“?E?V?‡?[?g?E?w?A");
^
sample.cpp:40:28: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Cat House_Hold("‰A’e”L");
^

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

Catのコンストラクタ引数を const char* にしたらどうでしょうか.
(あと,いくつかの箇所でstrcpyは間違いで,strcmpではないでしょうか)

投稿2018/07/17 08:57

fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

On-You

2018/07/17 12:46

fanaさん 仰るとおり「strcmp」の誤りで御座いました。 大変、失礼しました。 またCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。 ご回答頂きました内容で解決できたことまたソースの誤りまでご指摘頂き有難うございます。 ベストアンサーとさせて頂きます。
guest

0

「char」として宣言している部分を「const char」として書き換えれば上手くいくかと思い

リンク先のコードから多少変更しておりますが、いまだうまくいっていない状態でございます。

方向は間違っていないので、それを最後までやり通してください。

投稿2018/07/17 08:54

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

On-You

2018/07/17 12:49

kaztoさん コードの誤りを一部修正(「strcpy」を「strcmp」へ訂正)しCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。 ご回答頂きまして有難う御座いました。
guest

0

修正の方向性としては合っているので続けてください。まだ書き換えていない箇所が残っています。

それとは別に、ネットで勉強することを否定はしませんが、そのサイトの更新日付を確認してください。1997年の1月となっています。21年も昔の情報です。さすがにそこまで古いと言語仕様の乖離も大きいので、勉強用の参考としては不向きです。
手持ちのコンパイラーで正しくコンパイルできないソースを参考にしても混乱するだけだと思います。ネットを参考にするなら、その情報の鮮度も気にするようにしましょう。

投稿2018/07/17 12:07

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

On-You

2018/07/17 12:59

catsforepawさん コードの誤りを一部修正(「strcpy」を「strcmp」へ訂正)しCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。 ご回答頂き有難う御座いました。 また勉強で使用するサイトにつきましておすすめのものは御座いますでしょうか。(書籍でもかまいません。) ちなみに現在、私のほうで学習で使用している(使用予定)のサイトは下記になります。 ・一週間で身につくC++言語の基本(基本編は練習問題も含んで、踏襲済み。) ・猫でもわかるプログラミング(学習中) ・ロベールのC++教室(学習予定)
catsforepaw

2018/07/17 13:52

具体的に何がお勧めなのかという知見は、残念ながら持ち合わせていません。今時の入門サイト・入門書の類いの動向をウォッチして回っているわけではありませんので。 On-You さんはg++をコマンドラインから使用しているようですが、IDE(統合開発環境)の利用を強くお勧めします。WindowsであればVisual Studio(現在の最新版は2017)という強力な開発ツールがあります。できれば、開発ツールの使い方も解説しているような教本を使って、ツールの使い方も含めて勉強されるのがよろしいかと思います。 あと、入門書はできるだけ出版日の新しいものを選んでください。開発ツールのバージョンが目安となります。Visual Studio 2017を教材としている入門書なら、情報の鮮度としては問題ないでしょう。
guest

0

回答ではないですが、

そこに提示されてるエラーはいずれもワーニングです(エラーではない)
ワーニングは、コードの間違いの可能性がある、という警告ですんで、コンパイルは正常に終了しているはずです
そこらへん確認しときましょう

#で、そのワーニングを潰すには、他の方の回答をどうぞ

投稿2018/07/17 11:39

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

On-You

2018/07/17 12:52

y_waiwaiさん コードの誤りを一部修正(「strcpy」を「strcmp」へ訂正)しCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。 また出力されていた文言はエラーではなく警告である旨、ご指摘頂き有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問