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

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

ただいまの
回答率

90.51%

  • C++

    3468questions

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

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 193

On-You

score 3

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

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

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

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

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

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

【コード】

#include <stdio.h>
#include <string.h>

class Cat{
    int leg;
    char body_siza[32];
    char kind_of_cat[32];
public:
    char cat_name[32];
    Cat(char *kind);

    void show(const char *name);
};

Cat::Cat(char *kind)
{
    strcpy(kind_of_cat,kind);
    leg=4;
    if(!strcpy(kind,"メイン・クーン"))
        strcpy(body_siza,"大型");
    else{
        if(!strcpy(kind,"アメリカン・ショート・ヘア"))
            strcpy(body_siza,"小型");
        else
            strcpy(body_siza,"不明");
    }
}

inline void Cat::show(const char *name)
{
    printf("%sは、%sという種類の猫で足は%d本あります。\n"
        "また、この猫の体型は%sです。\n",name,kind_of_cat,leg,body_siza);
        return;
}

int main(void)
{
    Cat MaineCoon("メイン・クイーン");
    Cat American_Short("アメリカン・ショート・ヘア");
    Cat House_Hold("家庭猫");
    MaineCoon.show("マイケル");
    American_Short.show("ポチ");
    House_Hold.show("タマ");
    return 0;

}

【エラー内容】
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");
^

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/17 21:46

    fanaさん

    仰るとおり「strcmp」の誤りで御座いました。
    大変、失礼しました。
    またCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。

    ご回答頂きました内容で解決できたことまたソースの誤りまでご指摘頂き有難うございます。

    ベストアンサーとさせて頂きます。

    キャンセル

+1

「char」として宣言している部分を「const char」として書き換えれば上手くいくかと思い
リンク先のコードから多少変更しておりますが、いまだうまくいっていない状態でございます。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/17 21:49

    kaztoさん

    コードの誤りを一部修正(「strcpy」を「strcmp」へ訂正)しCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。

    ご回答頂きまして有難う御座いました。

    キャンセル

0

回答ではないですが、

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/17 21:52

    y_waiwaiさん

    コードの誤りを一部修正(「strcpy」を「strcmp」へ訂正)しCatのコンストラクタ引数を const char*にしたところ正常にコンパイル完了しました。

    また出力されていた文言はエラーではなく警告である旨、ご指摘頂き有難うございます。

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/17 21:59

    catsforepawさん

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

    また勉強で使用するサイトにつきましておすすめのものは御座いますでしょうか。(書籍でもかまいません。)

    ちなみに現在、私のほうで学習で使用している(使用予定)のサイトは下記になります。
    ・一週間で身につくC++言語の基本(基本編は練習問題も含んで、踏襲済み。)
    ・猫でもわかるプログラミング(学習中)
    ・ロベールのC++教室(学習予定)

    キャンセル

  • 2018/07/17 22:52

    具体的に何がお勧めなのかという知見は、残念ながら持ち合わせていません。今時の入門サイト・入門書の類いの動向をウォッチして回っているわけではありませんので。

    On-You さんはg++をコマンドラインから使用しているようですが、IDE(統合開発環境)の利用を強くお勧めします。WindowsであればVisual Studio(現在の最新版は2017)という強力な開発ツールがあります。できれば、開発ツールの使い方も解説しているような教本を使って、ツールの使い方も含めて勉強されるのがよろしいかと思います。
    あと、入門書はできるだけ出版日の新しいものを選んでください。開発ツールのバージョンが目安となります。Visual Studio 2017を教材としている入門書なら、情報の鮮度としては問題ないでしょう。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C++

    3468questions

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