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

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

ただいまの
回答率

90.36%

  • C++

    3738questions

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

  • オブジェクト指向

    297questions

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

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

受付中

回答 2

投稿

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

 前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)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/ツールのバージョンなど)

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/07/17 19:49

    複数のユーザーから「問題・課題が含まれていない質問」という意見がありました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

  • mts10806

    2018/07/17 20:13

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

    キャンセル

  • mts10806

    2018/07/17 20:15

    タイトルには要件のみを書いてください。 https://teratail.com/help/question-tips#questionTips3-1 >ありがちな失敗としては、「助けてください」「初心者です」という表題をつけてしまうことです。

    キャンセル

回答 2

+1

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

// ↓下記2行が必要
class User;
class Computer;

class hankatyou{
private:
public:
    virtual void setnumber();
    int getnumber();
    void doJudge(User, Computer); // 勝敗を判定する
//               ~~~~  ~~~~~~~~
    void showJudge();    // 勝敗を表示する

}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/17 17:56

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

    キャンセル

  • 2018/07/17 18:04

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

    キャンセル

  • 2018/07/17 18:06

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

    キャンセル

  • 2018/07/17 18:10

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

    キャンセル

  • 2018/07/17 18:19

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

    キャンセル

  • 2018/07/17 18:44

    手としては、以下のいずれかです。

    1) hankatyouクラスのsetnumber関数の、virtual宣言を消す
    2) Judge::setnumber()関数を、何もしない関数として定義する。

    キャンセル

0

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/17 17:59

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

    キャンセル

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

  • C++

    3738questions

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

  • オブジェクト指向

    297questions

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