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

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

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

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

Q&A

解決済

4回答

7489閲覧

[C++]値を返さないコントロール パスがあります。

satouterawaku

総合スコア13

C++

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

0グッド

0クリップ

投稿2016/11/11 01:41

###前提・実現したいこと
layer_StatusというクラスでPlayer_Goldというクラスから
Plus_goldとMinus_goldという2つの関数を使おうとしています
###発生している問題・エラーメッセージ
エラーメッセージ
warning C4715: 'Player_Status::Gold_Cul' : 値を返さないコントロール パスがあります。

###該当のソースコード
/////////////////////////////include.h/////////////////////
#define MAXLEVEL 30
#define MAXEXP 9999
#define MAXGOLD 9999
#define MAXPOSX 100
#define MAXPOSY 100
#define PLUS 1
#define MINUS 2
#include <cassert>
#include <algorithm>
/////////////////////////////Player_Status.h///////////////
#pragma once
class Player_Gold
{
private:
int m_gold;
public:
Player_Gold(int init_gold=0);
~Player_Gold();
bool Plus_gold(int);
bool Minus_gold(int);
int Get_Gold();
};
class Player_Status
{
private:
Player_Gold* P_Gold;
Player_Level* P_Level;
Player_Seed* P_Seed;
Player_Stage* P_Stage;
Player_Destroy* P_Destroy;
public:
void InitSatus();
bool Gold_Cul(Player_Gold*, int, int);
void Exp_Cul(Player_Level*, int);
bool Seed_Cul(Player_Seed*, int, int, int);
bool Destroy_Per_Cal(Player_Destroy*, int);
};

/////////////////////////////Player_Status.cpp/////////////
bool Player_Status::Gold_Cul(Player_Gold* P_Gold, int Gold ,int CulType)
{
assert(CulType==PLUS||CulType==MINUS);
if (CulType == PLUS)
{
return P_Gold->Plus_gold(Gold);
}
if (CulType == MINUS)
{
return P_Gold->Minus_gold(Gold);
}

}
///////////////////////////Player_gold_cpp/////////////////
bool Player_Gold::Plus_gold(int gold)
{
assert(0<gold&&gold<MAXGOLD);
if ((m_gold + gold) > MAXGOLD)
{
m_gold = MAXGOLD;
return false;
}
m_gold += gold;
return true;
}
bool Player_Gold::Minus_gold(int gold)
{

assert(0<gold&&gold<MAXGOLD); if ((m_gold - gold) < 0) { return false; } m_gold -=gold; return true;

}
###試したこと
書きなおしてみたんですがなぜfalseとtureで戻り値が出るはずなのに
エラーが出てしまいます優しく教えていただけたら幸いです

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

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

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

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

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

guest

回答4

0

if (CulType == MINUS)をelseにしてreturnに達するようにしたらwarningでなくなりました

投稿2016/11/11 02:01

satouterawaku

総合スコア13

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

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

0

既に、回答出てましたね。

assert(CulType==PLUS||CulType==MINUS);

この時点でCulTypeがPLUS、もしくはMINUS出なかった場合、以後の処理は行われないのは
ご存知だと思うのですが。

そのため、以後のif文が使われず、関数の最後へ...そのとき、関数の最後にreturnが無いですよね?

これだけだと思います。(実験していないため、間違っていたらご容赦)

投稿2016/11/11 01:55

Huyuto

総合スコア67

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

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

episteme

2016/11/11 02:06 編集

違います。assertは実行時の異常検出のため。コンパイル時のerror/warningとは関係ありません。
Huyuto

2016/11/11 02:06

episteme 様、ならびに閲覧者様。 改めて見直すと...申し訳ありませんでした。 > if (CulType == MINUS) > { > return P_Gold->Minus_gold(Gold); > } に、 > else return FALSE; などと記述すればいいのか。(自己納得)
guest

0

Gold_Cul関数の「if (CulType == MINUS) 」
の部分をelseに変えれば、警告は消えるでしょう。
それができない理由があるなら(実はCulTypeには、他にもZEROがあるとか)、
このコードは警告の通り、バグる可能性があります。

投稿2016/11/11 01:54

ishi9

総合スコア1294

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

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

0

ベストアンサー

CulTypeがPLUSでもMINUSでもなかったとき、返すべきものがないから。

投稿2016/11/11 01:46

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問