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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
namachan10777
記事: 32
登録日時: 5年前
住所: 四国
連絡を取る:

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

#1

投稿記事 by namachan10777 » 5年前

簡単なシューティングゲームを作ろうとしているのですがコンパイルエラーの原因が分からず困っています
エラー 指定された型と一致するオーバーロードされた関数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 スキップ ==========
D言語!D言語!

アバター
みけCAT
記事: 6273
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 5年前

とりあえず、

コード:

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

コード:

class WAdministrator;
と書くと、コンパイルが通るかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Aozora0630
記事: 85
登録日時: 5年前
住所: 日本
連絡を取る:

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

#3

投稿記事 by Aozora0630 » 5年前

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

アバター
みけCAT
記事: 6273
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 5年前

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が何かを知らず、コンパイルに失敗します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
namachan10777
記事: 32
登録日時: 5年前
住所: 四国
連絡を取る:

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

#5

投稿記事 by namachan10777 » 5年前

無事コンパイルすることができました。
今回エラーの原因を教えて頂いたおかげで修正点を突き止めることができました
みけCATさん、Aozora0630さん、本当にありがとうございました
D言語!D言語!

アバター
namachan10777
記事: 32
登録日時: 5年前
住所: 四国
連絡を取る:

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

#6

投稿記事 by namachan10777 » 5年前

すいません解決にするのを忘れていました...
D言語!D言語!

閉鎖

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