ページ 11

コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 12:44
by namachan10777
簡単なシューティングゲームを作ろうとしているのですがコンパイルエラーの原因が分からず困っています
エラー 指定された型と一致するオーバーロードされた関数Player::Playerのインスタンスがありません
というコンパイルエラーが出るうえヘッダファイルをインクルードしたはずのWAdministratorクラスまで見つからないようです
WAdministratorクラスが各クラスのインスタンスを持ち、このPlayerクラスがWAdministratorクラスのポインタを通じて弾クラスや敵クラスを間接的に操作するようにしたいのですが...
C++は始めて2週間で、OSはWindows8.1、IDEはVisual studio 2013 Community、DXライブラリを使っています
Player.h

コード:

#ifndef Player_INCLUDE
#define Player_INCLUDE

#include "Charcter.h"
#include "WAdministrator.h"

class Player:Charcter{
public:
	Player();
	Player(int *tmpKey, WAdministrator *admin);
	~Player();
	void update(){

	}
private:
	WAdministrator *admin;
};
Player::Player(){}
Player::Player(int *tmpKey,WAdministrator *admin){
          //↑ここで、エラー 指定された型と一致するオーバーロードされた関数Player::Playerのインスタンスがありません、と言われます
}
Player::~Player(){}

#endif
1>------ ビルド開始: プロジェクト:Shooting2.0.1, 構成:Debug Win32 ------
1> Main.cpp
1>c:\users\owner\documents\visual studio 2013\projects\shooting2.0.1\player.h(8): error C2061: 構文エラー : 識別子 'WAdministrator'
1>c:\users\owner\documents\visual studio 2013\projects\shooting2.0.1\player.h(15): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\owner\documents\visual studio 2013\projects\shooting2.0.1\player.h(15): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\owner\documents\visual studio 2013\projects\shooting2.0.1\wadministrator.h(21): error C2661: 'Player::Player' : 2 個の引数を伴うオーバーロードされた関数はありません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

Re: コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 14:04
by みけCAT
とりあえず、

コード:

#include "WAdministrator.h"
を消して、そこに

コード:

class WAdministrator;
と書くと、コンパイルが通るかもしれません。

Re: コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 14:06
by Aozora0630
こう言う場合はソースコードを全て見せた方がいいと思います(インクルードしてる奴も)
「指定された型と一致するオーバーロードされた関数Player::Playerのインスタンスがありません」
これは、メンバー関数のプロトタイプ宣言と一致する関数が見つからなかったのだと思います。
もう一度、Player::Player();の確認と引数が一致しているか確かめてみてください。

Re: コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 14:11
by みけCAT
Wadministrator.hが

コード:

#ifndef WAdministrator_INCLUDE
#define WAdministrator_INCLUDE

#include "Player.h"

class WAdministrator {
	// hogehoge
};

#endif
のような形であると仮定します。
この状態で、Main.cppからPlayer.hをincludeする前にWadministrator.hをincludeすると、

コード:

// Charcter.hの内容

class Player:Charcter{
public:
	Player();
	Player(int *tmpKey, WAdministrator *admin);
	~Player();
	void update(){

	}
private:
	WAdministrator *admin;
};
Player::Player(){}
Player::Player(int *tmpKey,WAdministrator *admin){
          //↑ここで、エラー 指定された型と一致するオーバーロードされた関数Player::Playerのインスタンスがありません、と言われます
}
Player::~Player(){}


class WAdministrator {
	// hogehoge
};
のように展開されるはずです。
Player.hからもWAdministrator.hがincludeされていますが、ここではすでにWAdministrator_INCLUDEが定義されているので、実質何も展開されません。
その結果、WAdministratorの定義より前にPlayerの定義が来るため、ここではコンパイラはまだWAdministratorが何かを知らず、コンパイルに失敗します。

Re: コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 18:09
by namachan10777
無事コンパイルすることができました。
今回エラーの原因を教えて頂いたおかげで修正点を突き止めることができました
みけCATさん、Aozora0630さん、本当にありがとうございました

Re: コンパイルエラーの原因が全く解らず...

Posted: 2015年4月01日(水) 18:35
by namachan10777
すいません解決にするのを忘れていました...