引数にオブジェクトを渡したい

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

引数にオブジェクトを渡したい

#1

投稿記事 by PUMP » 8年前

コード:

//[myclass.h]
//classを宣言する
class MyClass {
	int Draw();
};

コード:

//[myclass.cpp]
//classの実装
#pragma once
#include "myclass.h"
int MyClass::Draw() {
	return 0;
}

コード:

//[tmp.h]
//tmp関数宣言、引数をMyClassのオブジェクトにしたい
int tmp(MyClass);

コード:

//[tmp.cpp]
//tmp関数の実装
#pragma once
#include "tmp.h"
#include "myclass.h"
int tmp(MyClass my) {
	my.Draw(); //クラスの関数呼び出し
	return 0;
}

コード:

//[main.cpp]
//メイン関数
#pragma once
#include "tmp.h"
#include "myclass.h"
int main() {
	MyClass my;
	tmp(my); //tmp関数呼び出し
	return 0;
}
このように、関数の引数にオブジェクトを渡したいのですが
「定義されていない識別子です。」とエラーが出てしまいます。
tmp.hでMyClassが定義されていないのが原因なのは分かっていますが、解決方法が自分には思いつきません。
解決方法を教えてください。

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

Re: 引数にオブジェクトを渡したい

#2

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

各ヘッダにインクルードガードを追加して、tmp.hからmyclass.hをインクルードするだけではダメなのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

PUMP
記事: 23
登録日時: 8年前

Re: 引数にオブジェクトを渡したい

#3

投稿記事 by PUMP » 8年前

それは一度試したんですが、'class' 型の再定義というエラーが...
ヘッダファイルでヘッダファイルをインクルードするのはあんまり良くないと聞いたことがありますし

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

Re: 引数にオブジェクトを渡したい

#4

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

PUMP さんが書きました:それは一度試したんですが、'class' 型の再定義というエラーが...
classは予約語なので、class型は存在しないはずです。
きちんとインクルードガードを追加しましたか?

別の方法として、引数を参照にして前方宣言を使い、必要なら関数の実装側でコピーする方法が考えられます。

コード:

//[tmp.h]
#ifndef TMP_H_GUARD_1DA0130D_623C_4AC7_8E0B_93891DFED7C5
#define TMP_H_GUARD_1DA0130D_623C_4AC7_8E0B_93891DFED7C5

//tmp関数宣言、引数をMyClassのオブジェクトにしたい
class MyClass;
int tmp(const MyClass&);

#endif

コード:

//[tmp.cpp]
//tmp関数の実装
#pragma once
#include "tmp.h"
#include "myclass.h"
int tmp(const MyClass& my_arg) {
	MyClass my = my_arg;
	my.Draw(); //クラスの関数呼び出し
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

PUMP
記事: 23
登録日時: 8年前

Re: 引数にオブジェクトを渡したい

#5

投稿記事 by PUMP » 8年前

みけCAT さんが書きました:各ヘッダにインクルードガードを追加して、tmp.hからmyclass.hをインクルードするだけではダメなのですか?
各ヘッダにインクルードガード = myclass.hにもインクルードガード ということですね。 すみません、完全に見落としててtmp.hにしかしてませんでした。
無事に解決することができました。ありがとうございます。
オフトピック
インクルードガードはインクルードするファイルが無い時は、書いても意味の無いものだと思っていましたが
インクルードするファイルが無くても何か役目?効果?があるようですね。
一体何をするものなんでしょうか...

閉鎖

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