Javaを仕事で使っています。
最近趣味でC++を始めました。色々形式の違いに戸惑っています。
C++では関数を宣言しなければならないので、クラス名と同じヘッダーファイルにそのクラスで使う関数を宣言して、それをインクルードしています。
そこで今、壁にぶちあたりました。
あるクラス(仮にFooとします)の関数で、他のクラス型(Hogeとします)を引数に取りたいので、ヘッダーファイルにそれを宣言しようとしているのですが、コンパイルエラーになってしまいます。
Foo.hは以下のような感じ。
#include Hoge.h
中略
GetHoge(Hoge hoge);
コンパイルエラーでは
error C2011: 'Hoge' : 'class' 型の再定義
などと言われます。
クラスとその同名のヘッダーファイル、という形式を変えずに
他のクラス型を引数にとる関数を作るには、どうしたらよいのでしょうか?
C++に関しては全くの素人です。詳しい方、ご教示願います。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
通常、
#ifndef HOGE_H
#define HOGE_H
// ヘッダファイルの中身
#endif
とすることで、複数回Hoge.hをインクルードしても重複定義になることを回避します。
ところで、
> GetHoge(Hoge hoge);
の部分ですが、Hogeを値渡しする必然性はあるのでしょうか?
もし、GetHoge(const Hoge& hoge);のように参照渡しまたはポインタ渡しで済むのであれば、
class Hoge;
int GetHoge(const Hoge& hoge);
のようにすることでHoge.hをインクルードせずに済みます。
このように、可能な限りソースファイル(ヘッダファイルを含む)間の依存関係は少なくしておくことをお勧めします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
イベントにAddHandlerされてい...
-
C#のクラス設計について教えて...
-
OnInitDialog()の関数の組み込み方
-
正規表現 [^/]+ の意味を教えて
-
C++ protectedにアクセス不可
-
派生クラスから基本クラスprote...
-
オーバーライド関数の呼び出し...
-
CMainFrameクラスの使い方
-
このコンパイルエラーの意味に...
-
ダイアログ表示時にチェックボ...
-
VC++ MFC CFrameWndって・・・
-
ボタンのオーナードローについて
-
DLLからEXEのクラスを呼び出す...
-
エディットコントロールでEnter...
-
[MFC] CWnd::MessageBoxの警告...
-
ダイアログクラスのコントロー...
-
【ASP.NET】 独自で作成したク...
-
名前空間について
-
ソケットを使った「非同期」通...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報