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

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

ただいまの
回答率

90.32%

  • C++

    3772questions

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

  • Visual Studio 2013

    312questions

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

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

解決済

回答 1

投稿 編集

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

ryop9982

score 7

 前提・実現したいこと

名前と誕生日月を入力して表示するというプログラムを作っています。
そこでキーボードから入力した名前を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をつくり別に入れてやったらエラーが消えて自己解決することができました。

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

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

    キャンセル

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

  • C++

    3772questions

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

  • Visual Studio 2013

    312questions

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