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

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

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

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

Visual Studio 2013

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

Q&A

解決済

1回答

573閲覧

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

ryop9982

総合スコア15

C++

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

Visual Studio 2013

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

0グッド

0クリップ

投稿2018/07/23 06:22

編集2018/07/23 06:30

前提・実現したいこと

名前と誕生日月を入力して表示するというプログラムを作っています。
そこでキーボードから入力した名前を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++

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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

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

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

char型で試したところの関数の引数が多すぎますというエラーはなぜ起こったのか

調べてもわからず困っています。

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

投稿2018/07/23 07:48

t_obara

総合スコア5488

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

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

ryop9982

2018/07/24 00:59

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問