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

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

ただいまの
回答率

90.51%

  • C++

    3452questions

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

  • Visual Studio 2013

    307questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

名前と誕生日月を入力して表示するプログラムのエラー

解決済

回答 1

投稿 編集

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

ryop9982

score 6

 前提・実現したいこと

名前と誕生日月を入力して表示するというプログラムを作っています。
そこでキーボードから入力した名前をnameに入れてShowDataで出力しようと思ったのですがエラーが出ました。
char型の変換でエラーを吐いていたためすべてchar型にして試してみましたが関数の引数が多すぎますというエラーが出てダメでした。

なぜ、このようなエラーが出るのか。char型で試したところの関数の引数が多すぎますというエラーはなぜ起こったのか
調べてもわからず困っています。
よろしければ知識をお借りしたいです。よろしくお願いいたします。

 発生している問題・エラーメッセージ

エラー
    1    error C2440: '=' : 'std::string' から 'char' に変換できません。    
    2    IntelliSense: "std::string" から "char" への適切な変換関数が存在しません    

 該当のソースコード

#include <cstring>
#include <iostream>
#include <string>
#include <cstring>
#include<fstream>
using namespace std;
#define N 80

class Base{
public:
    char name[N];
    int Getday();
    int Getmonth();
    int day;
    int month;
    virtual void Setday(int a);
    virtual void Setmonth(int b);
    virtual void Setname(string c);
    void ShowData();
    Base();
};
class  friend1 : public Base {
private:
    void showData();
public:
    friend1();
};


void Base::ShowData(){
    cout << name << "\n";
    cout << "誕生日" << "\n";
    cout << month << "月";
    cout << day << "日" << "\n";
};
void friend1::showData() {

    cout << name << "\n";
    cout << "誕生日" << "\n";
    cout << month << "月";
    cout << day << "日" << "\n";
}

int Base::Getday(){
    return day;
}
int Base::Getmonth(){
    return month;
}


void Base::Setday(int a){
    if ((a >= 1) && (a <= 31)){
        day = a;
    }

    else
    {
        cout << "" << "\n";
    }
    return;
}
void Base::Setmonth(int a){
    if ((a >= 1) && (a <= 12)){
        month = a;
    }

    else
    {
        cout << "" << "\n";
    }
    return;
}
void Base::Setname(string c){
    name[N] = c;
    return;
}


friend1::friend1() {
    string aaa_name;
    int aaa, aaa2;

    cout << "名前の入力 : ";
    cin >> aaa_name;
    cout << "月の入力 : ";
    cin >> aaa;
    cout << "日の入力 : ";
    cin >> aaa2;

    Setmonth(aaa);
    Setday(aaa2);
    Setname(aaa_name);
}




Base::Base(){
    Setday(23);
    Setmonth(6);
    strcpy_s(name, "bbb");
}

int main(){
    Base objct11;
    friend1 objct22;

    objct11.ShowData();
    cout << "\n";
    objct22.ShowData();

    return 0;
}

 補足情報(FW/ツールのバージョンなど)

Visual Studio2013
C++

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

Base::Setnameメソッドの以下の行でエラーが出ているのですよね?
name[N] = c;

name自体は文字の配列で、そのN番目はcharです。
※ しかも確保した領域外を指し示しているので、その点も問題ですが。

そのcharにstringを代入しようとしているのでエラーになっています。

全体を見て想像するに、nameにSetnameで指定されたパラメータの内容をコピーしたいのですよね?
2通りの解決方法があり、メンバ変数であるnameをchar配列ではなくstd::stringにするか、nameにcの内容をコピーする方法です。

char型で試したところの関数の引数が多すぎますというエラーはなぜ起こったのか
調べてもわからず困っています。

ちなみに、上記のように記載されても、具体的にどのようにしたのかがわからないと、すでに試されていてご存知の事柄なのか否かが判断できないので、回答者が混乱する可能性があります。可能な限り試された内容をご提示いただくとよろしいのではないかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/24 09:59

    返信遅れてしまい申し訳ございません、回答ありがとうございます。
    charの配列を80準備したと考えていたのですが自分の考えが違ったみたいですね・・・また参考書を読み領域のところを勉強しなおします...
    std::stringにしたところ
    Base::Base(){
    Setday(23);
    Setmonth(6);
    strcpy_s(name, "bbb");
    }
    のstrcpy_sに2つオーバーロードされているのかエラーが出ました。
    ここはname2をつくり別に入れてやったらエラーが消えて自己解決することができました。

    具体的にどのようにしたかわからないとのことで教えてくださりありがとうございます!
    これから気を付けていきたいと思います。
    解決しましたが追加で記載しようと思います!

    今回は回答ありがとうございました

    キャンセル

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

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

関連した質問

  • 解決済

    呼び出すメソッドで戻り値を変えたい

    CalendarClassを使って、1年分の日付を取得するPGを作ってます。 メソッドに返す戻り値を変える良い方法はありませんか。 例えば、mainClassでthisMo

  • 解決済

    C言語のプログラム!

    C言語のプログラムで、以下のような結果を出力するコードを教えてください! <出力結果> 目的地:東京 ←コマンドプロンプトに東京と入力する 場所:東の方角←東京以外を入力すると

  • 解決済

    C言語 ファイルからの読み取り

    大学の授業の課題で以下のような問題が出たのですが分かりません。C言語です。 ファイルから読み取る関数と出力する関数を分けたいです。 null 文字を除いて最大20文字を格納でき

  • 解決済

    C++でメンバ関数をクラス外の関数から呼び出す方法 on Arduino

    ArduinoのattachInterruptにメンバー関数を割り当てる方法について質問です。 このページの回答を参考に test_class.ino #include "te

  • 解決済

    scanfってどうやって使うのですか?

    情報オリンピックの過去問の答えを見て思ったのですが、scanf関数ってどんなものですか?

  • 解決済

    vs2017の例外処理について

    基本の文なのですが、うまくいきません。 助けてください。 調べていると、vs2005以降は例外処理をするのに設定がいると書いてあったので clean-mobile-phone.co

  • 解決済

    C++でC#のMemoryStreamと同様の機能をもつクラスはありますか?

     質問 C++でC#のMemoryStreamクラスと同様の機能やクラスはありますか? C++にて可変長バッファを扱うよい方法があればご教示いただきたく、よろしくお願いします。

  • 受付中

    二次元配列のvector(struct)に一元の配列をpush_backしたい。

    cinで行の値、括弧でくくられた3つの値をそれぞれ入力してもらいその値を構造化されたvectorにpush_backしたいのですが、どのようにすればよいのかわかりません。 最終的に

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

  • C++

    3452questions

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

  • Visual Studio 2013

    307questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです