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

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

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

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

Q&A

解決済

2回答

1418閲覧

データ型の不具合

reotantan

総合スコア295

C++

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

0グッド

0クリップ

投稿2015/10/26 21:59

class.hでenum RelationTypeとRelationType ComparedTo(DateType someDate)を宣言して、
class.ppで
RelationType dateType::という風に実装しようと
とするとエラーになります。
教科書にはこのようにあったのですが、
個人的にはRelationTypeは型ではなく、変数名なので
なぜ型のように使っているのだろうと疑問に思いました。
どのように修正したらいいでしょうか?

/* * Main.cpp * * Created on: 2015/10/26 * */ #include<iostream> #include"DateType.h" using namespace std; int main() { DateType today; DateType anotherDay; today.Initialize(9, 24, 2003); anotherDay.Initialize(9, 25, 2003); cout << "Today is" << today.MonthIs() << "/" << today.DayIs() << "/" << today.YearIs() << endl; cout << "Another day is" << anotherDay.MonthIs() << "/" << anotherDay.YearIs() << endl; }
DateType.cpp #include <iostream> void DateType::Initialize(int newMonth,int newDay,int newYear){ year=newYear; month=newMonth; day=newDay; } int DateType::MonthIs() const{ return month; } int DateType::DayIs() const{ return day; } int DateType::YearIs() const{ return year; } RelationType DateType::ComparedTo(DateType aDate){ if(year<aDate.year) return LESS; else if(year>aDate.year) return GREATER; else if(month<aDate.month) return LESS; else if(month>aDate.month) return GREATER; else if(day<aDate.day) return LESS; else if(day>aDate.day) return GREATER; else return EQUAL; }言語を入力 コード
DateType.h class DateType { public: void Initialize(int nextMonth, int newDay, int newYear); int YearIs() const; int MonthIs() const; int DayIs() const; enum RelationType{LESS,EQUAL,GREATER}; RelationType ComparedTo(DateType someDate); private: int year; int month; int day; };

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

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

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

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

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

kutsulog

2015/10/27 01:44

出てくるエラーはコンパイルエラーですか?実行エラーですか? また、どのようなエラーメッセージが表示されますか?
guest

回答2

0

ベストアンサー

RelationType DateType::ComparedTo(DateType aDate)
このコードがコンパイルエラーになるということでよろしいでしょうか?
でしたら
DataType::RelationType DateType::ComparedTo(DateType aDate)
でうまくいくと思いますよ.
RelationTypeはDataType classのなかにあるのでスコープが違います.
ちなみに enum 列挙体名{ ... }; の列挙体名は変数とはちょっと違うのでこのように使っても大丈夫です.

投稿2015/10/27 04:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

reotantan

2015/10/27 20:42

int DateType::YearIs() const{ return year; } DateType::RelationType DateType::ComparedTo(DateType aDate) この二つでなぜ::が二つあるものと一つあるものがあるのでしょうか? 二つ出てくるものが初めてどういう意味なのか困惑しています。
退会済みユーザー

退会済みユーザー

2015/11/04 03:36

まずintは組み込み型(built in type)ですね.どのスコープでも使用できるデータ構造です. つづいてRelationTypeですが,たしかにenum型も組み込み型ではあります.しかしenumの場合は列挙体{ 列挙子1, 列挙子2, … };と,クラスのインスタンス生成のように,自分でカスタマイズしたenum型を定義できますね. そしてこのカスタマイズしたenum型であるRelationTypeは,定義した(カスタマイズした)位置がDataTypeクラスの中なので,外からは見えないのです. コンパイラ君「RelationType?そんな型,おれは組み込んだ覚えはないぞ.エラーエラー.DataType::RelationTypeならプログラマさんが作ってるけどこれ違うしなー.違うよなー」 DataType::yearIs()や,DataType::ComparedTo()も同様で,DataTypeクラスの中で定義されているから,DataType::という接頭辞がいるのです. 「::演算子」はスコープ解決演算子という名前ですので,まあそういうことですよ.
guest

0

こんにちは。

enum RelationType{LESS,EQUAL,GREATER};

enum型の型定義ですね。
メンバ変数の定義ではないです。

DateType.cppにDateType.hのインクルードが漏れていると思います。エラーはこれが原因かも。

投稿2015/10/27 03:11

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問