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

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

新規登録して質問してみよう
ただいま回答率
85.49%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

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

Q&A

2回答

1609閲覧

オブジェクト指向について力を貸してください!!

tarotanakahuzh

総合スコア4

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

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

0グッド

0クリップ

投稿2018/07/17 08:32

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ
error C2061 構文エラー:識別子

該当のソースコード

#include <iostream> #include <cstdlib> #include <ctime> using namespace std; #define HAN 0 #define TYOU 1 // 判定を表す定数 #define WIN 0 #define LOSE 1 class hankatyou{ private: public: virtual void setnumber(); int getnumber(); void doJudge(User, Computer); // 勝敗を判定する void showJudge(); // 勝敗を表示する }; // ユーザーを表すクラス class User : public hankatyou{ private: int number; // public: void setnumber(); // int getnumber(); // }; // void User::setnumber() { cout << "0:半、1:丁 \n"; cout << "半か丁か選んでください。="; cin >> number; } // ユーザーの手を返すメンバ関数 int User::getnumber() { return number; } // コンピュータを表すクラス class Computer : public hankatyou{ private: int saikoro1;// 手 int saikoro2; int mix; int number; public: void setnumber(); // 手を選択する int getnumber(); // 手を返す }; // コンピュータの手を選択するメンバ関数 void Computer::setnumber() { saikoro1 = rand() % 6; saikoro2 = rand() % 6; mix = saikoro1 + saikoro2; if (mix % 2 == 0){ number = TYOU; } else{ number = HAN; } } // コンピュータの手を返すメンバ関数 int Computer::getnumber() { cout << "さいころ二つの合計=" << number << "\n"; return number; } // ジャッジを表すクラス class Judge : public hankatyou{ private: int judge; // 勝敗 public: void doJudge(User, Computer); // 勝敗を判定する void showJudge(); // 勝敗を表示する }; // ジャッジが勝敗を判定するメンバ関数 void Judge::doJudge(User u, Computer c) { int user, computer; user = u.getnumber(); computer = c.getnumber(); if (user == HAN && computer == TYOU || user == TYOU && computer == HAN) { judge = WIN; } else { judge = LOSE; } } // ジャッジが勝敗を表示するメンバ関数 void Judge::showJudge() { if (judge == WIN) { cout << "ユーザーの勝ちです!\n"; } else if (judge == LOSE) { cout << "ユーザーの負けです!\n"; } } // プログラムのメイン関数 int main() { User user; Computer computer; Judge judge; while (1) { // 乱数を初期化する srand(time(NULL)); // ユーザーが手を選択する user.setnumber(); // コンピュータが手を選択する computer.setnumber(); // 勝敗を判定する judge.doJudge(user, computer); // 勝敗を表示する judge.showJudge(); } return 0; }

試したこと

デバックしてみたところvoid doJudge(User, Computer);のUserの所で構文エラー:識別子がでます。Computerの方には出ないのですが。。。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2018/07/17 11:13

質問テンプレート部分の文言が多く残っています。質問内容や意図を読み取る上ではノイズにしかなりませんので、自身の質問に関係のある文章(およびソースコード)のみ残すか、きちんと残りのテンプレート部分を埋めてください。
guest

回答2

0

下記のdoJudge関数の引数に使用されているUser、Computerクラスは、この時点では宣言されていません。
以下のように、宣言を追加してやる必要があります。

C++

1// ↓下記2行が必要 2class User; 3class Computer; 4 5class hankatyou{ 6private: 7public: 8 virtual void setnumber(); 9 int getnumber(); 10 void doJudge(User, Computer); // 勝敗を判定する 11// ~~~~ ~~~~~~~~ 12 void showJudge(); // 勝敗を表示する 13 14}

投稿2018/07/17 08:44

kazto

総合スコア7196

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

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

tarotanakahuzh

2018/07/17 08:56

宣言してみましたがなりませんでした。
kazto

2018/07/17 09:04

「なりませんでした」とは、具体的にどのようなエラーが発生しましたか?
tarotanakahuzh

2018/07/17 09:06

エラー 2 error LNK2001: 外部シンボル ""public: virtual void __thiscall hankatyou::setnumber(void)" (?setnumber@hankatyou@@UAEXXZ)" は未解決です エラー 3 error LNK1120: 1 件の未解決の外部参照 このようなエラーがでます
kazto

2018/07/17 09:10

なるほど。 Judgeクラスがhankatyou抽象クラスを継承している一方で、Judge::setnumber()関数の実体が存在しないため、リンクエラーが発生している、という流れですね。 無いなら作ってやる必要があります。
tarotanakahuzh

2018/07/17 09:19

どうにかしてjudgeクラスからuser、computerクラスの返した値を使いたいのですがどうすればいいのですか?
kazto

2018/07/17 09:44

手としては、以下のいずれかです。 1) hankatyouクラスのsetnumber関数の、virtual宣言を消す 2) Judge::setnumber()関数を、何もしない関数として定義する。
guest

0

これで解決できるのでは。
error c2061:構文エラーで困っています。

投稿2018/07/17 08:40

tatamyiwathy

総合スコア1039

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

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

tarotanakahuzh

2018/07/17 08:59

試してみましたができませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問