VC++2008 C2664エラー マルチバイト文字セットでもコンパイルあるいはビルド出来ません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こある
記事: 5
登録日時: 12年前
住所: 新潟

VC++2008 C2664エラー マルチバイト文字セットでもコンパイルあるいはビルド出来ません

#1

投稿記事 by こある » 12年前

こんにちわ。ババ抜きプログラムを作っていたところ、以下のエラーが検出されました。


[エラー 1 error C2664: 'Check_PossessionkndPlayer' : 1 番目の引数を 'Player_t **' から 'Player_t *' に変換できません。(新しい機能 ; ヘルプを参照)] ファイル Player.cpp 行 15

↓コード

コード:

//Player.cpp
#include "DxLib.h"
#include "struct.h"//Cardknd_t 等を使用している
#include "Check.h"//Check_PossessionkndPlayerを使用している

static Cardknd_t CardkndPlayer;//プレイヤーの所持カードの種類定義 Aを何枚持ってるか等。
static int m_tmpCheck;//5枚以上同種カード所持の場合、CheckPossessionKnd関数から引数1が返される。

//初期化
void Player_Initialize( Player_t *Player ){

	for( int number=0; number<18; number++ ){										//17枚の初期所持カード設定

		Player->possession[number] = GetRand(13);									//GetRand関数は0~引数に持たせた値まで、完全ランダムに入れる。
		m_tmpCheck = Check_PossessionkndPlayer( &Player, &CardkndPlayer, number );	//5枚同種カードを所持していないか確認 兼 加算
			if( m_tmpCheck != 0 ){	//5枚の同種カード所持されていたなら
				number--;			//一つ前のカード取得をやり直す
			}
	}

}

//計算
void Player_Update();

//描画
void Player_Draw();

//終了
void Player_Finalize();

コード:

//Check.cpp
#include "DxLib.h"
#include "struct.h"//Player_t 等を使用している

//5枚同種カードを所持していないか確認 兼 加算
int Check_PossessionkndPlayer( Player_t *Player, Cardknd_t *Card, int number ){
	
	for( int i=0; i<=number ; i++ ){

		switch(Player->possession[i]){//possession[i]の中身が0~13のいずれか。
			case 0: 
				Card->A++;
				if( Card->A > 4 ){
					Card->A--;
					return 1;
				}
				break;
			case 1: 
				Card->Two++;
				if( Card->Two > 4 ){
					Card->Two--;
					return 1;
				}
				break;
			case 2: 
				Card->Three++;
				if( Card->Three > 4 ){
					Card->Three--;
					return 1;
				}
				break;
			case 3: 
				Card->Four++;
				if( Card->Four > 4 ){
					Card->Four--;
					return 1;
				}
				break;
			case 4: 
				Card->Five++;
				if( Card->Five > 4 ){
					Card->Five--;
					return 1;
				}
				break;
			case 5: 
				Card->Six++;
				if( Card->Six > 4 ){
					Card->Six--;
					return 1;
				}
				break;

			case 6: 
				Card->Seven++;
				if( Card->Seven > 4 ){
					Card->Seven--;
					return 1;
				}
				break;
			case 7: 
				Card->Eight++;
				if( Card->Eight > 4 ){
					Card->Eight--;
					return 1;
				}
				break;
			case 8: 
				Card->Nine++;
				if( Card->Nine > 4 ){
					Card->Nine--;
					return 1;
				}
			case 9: 
				Card->Ten++;
				if( Card->Ten > 4 ){
					Card->Ten--;
					return 1;
				}break;
			case 10: 
				Card->J++;
				if( Card->J > 4 ){
					Card->J--;
					return 1;
				}
				break;
			case 11: 
				Card->Q++;
				if( Card->Q > 4 ){
					Card->Q--;
					return 1;
				}
				break;
			case 12: 
				Card->K++;
				if( Card->K > 4 ){
					Card->K--;
					return 1;
				}
				break;
			case 13: 
				Card->Joker++;
				if( Card->Joker > 4 ){
					Card->Joker--;
					return 1;
				}
				break;
		}
	}
	return 0;
}
プロジェクトの設定で、すべての構成にし、構成プロパティ - 全般 - 文字セット(マルチバイトセットを使用する) - OK
としても、同エラーが検出されてしまいます。
どうすれば良いでしょうか?
最後に編集したユーザー こある on 2014年1月16日(木) 13:08 [ 編集 1 回目 ]

box
記事: 2002
登録日時: 15年前

Re: VC++2008 C2664エラー マルチバイト文字セットでもデバッグ出来ません

#2

投稿記事 by box » 12年前

マルチバイト文字セットがどうのこうの、という話ではありません。
こある さんが書きました:

コード:

//Player.cpp
void Player_Initialize( Player_t *Player ){
と書いているので、Playerという変数はPlayer_t型へのポインターです。

また、
こある さんが書きました:

コード:

		m_tmpCheck = Check_PossessionkndPlayer( &Player, &CardkndPlayer, number );	//5枚同種カードを所持していないか確認 兼 加算
と書いているので、Check_PossessionkndPlayer関数の第1引数の型が
Player_t型へのポインターへのポインターであることを想定しています。
それに対し、実際のCheck_PossessionkndPlayer関数の第1引数の型は、
こある さんが書きました:

コード:

//Check.cpp
int Check_PossessionkndPlayer( Player_t *Player, Cardknd_t *Card, int number ){
Player_t型へのポインターですから、呼び出しているところと型が食い違っています。

また、タイトルに「デバッグできません」とありますが、コンパイルあるいはビルドできません、が正しいのではないでしょうか。
デバッグ(debug)とは、コンパイルあるいはビルドが正しくできて実行ファイルが作成できたが、
仕様どおりに動かない(つまりバグがある)プログラムからバグを取り除く、ということです。
質問者さんの今の段階は、デバッグという工程に到達していないと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

こある
記事: 5
登録日時: 12年前
住所: 新潟

Re: VC++2008 C2664エラー マルチバイト文字セットでもコンパイルあるいはビルド出来ません

#3

投稿記事 by こある » 12年前

>>また、タイトルに「デバッグできません」とありますが、コンパイルあるいはビルドできません、が正しいのではないでしょうか。
確かに仰るとおりですね。修正しておきました。

>>Player_t型へのポインターですから、呼び出しているところと型が食い違っています。
なるほどです。設定どうこうの問題ではなかったのですね。
有難う御座いました!

閉鎖

“C言語何でも質問掲示板” へ戻る