![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
C++初心者で初歩的な質問ですがよろしくお願いします。
【内容】
<test.h>
class testを定義
<test2.h>
class testを継承したclass test2を定義
<test3.h>
class testを継承したclass test3を定義
<test4.h>
class test2とclass test3で作成したインスタンスをメンバに持つclass test4を定義
【問題】
test2.hとtest3.hではclass testを継承するために#include "test.h"をしています。そして、test4.hではclass test2とclass test3を使うため#include "test2.h"、#include "test3.h"をしているのでredefinition of 'class test'というエラーが発生します。
このようなエラーを発生させずに上記の内容のものを実現させることは出来るのでしょうか?
ちなみにOSはTurboLinux8でコンパイラはg++です。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
test.hの先頭に次の2行を追加してください。
#ifndef __TEST_H__
#define __TEST_H__
また、最後に次の行を追加してください。
#endif __TEST_H__
もちろん、test2.hやtest3.hもインクルードが重なる可能性がある場合は__TEST2_H__や__TEST3_H__で最初と最後に行を追加してあげましょう。これらは標準ヘッダファイル(stdio.hなど)で使われているテクニックです。
基本的にはヘッダファイルは必ずこれらの行でくくるようにしてあげると良いでしょう。
test.h
--------
#ifndef __TEST_H__
#define __TEST_H__
ヘッダファイルの内容~~~
#endif __TEST_H__
--------
↑こんな風にすると良いです。
No.2
- 回答日時:
ヘッダファイルは, 何回 #include してもよいように書くのが基本です.
そのためによく使われるのが
#ifndef some_identifier
#define some_identifier
ここにヘッダファイルの本体を書く
#endif
という手法です. some_identifier をヘッダファイルごとに決めておけば (ヘッダファイルの名前から決めると楽) OK.
このような手法はシステム標準のヘッダファイルでも使われていますので, そちらも参考にしてはどうでしょうか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- HTML・CSS 【CSS】特定のリンクを含むaタグを指定できるかどうか? 3 2022/10/15 02:45
- Java java final 1 2022/06/10 22:49
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- その他(芸能人・有名人) 小林幸子の話 1 2022/07/21 19:44
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- HTML・CSS brにクラスをつけてcssでdisplay:none;としても改行されてしまいます 2 2022/06/22 14:45
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
classの再定義エラーについて
-
可変変数にアロー演算子を使いたい
-
PHPの変数値をリンクさせたい
-
関数の動きと記述方法の意味を...
-
PHPで、相対的な変数名の場合の...
-
サブネットマスクを用いたIP制...
-
Fatal error: Cannot use []
-
VB.NETからVBAマクロ(引数)を呼...
-
デフォルトの定義済みクラスに...
-
共用体のサイズをsizeofで
-
【Objective-c】rubyの__send__...
-
既存関数の上書き
-
VB6のコンボボックスのテキスト...
-
PHPプログラム上で「URLを直接...
-
PHP Catchable fatal error の...
-
PHP、ヒアドキュメント内でのIF...
-
メール本文の構成 行頭空白
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
エラーの理由が分りません。Pri...
-
可変変数にアロー演算子を使いたい
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
vb作成したらでbeep音が鳴りま...
-
次のhtml・cssでspan内の文字を...
-
classの再定義エラーについて
-
既存関数の上書き
-
protectedなのにアクセスできな...
-
配列の操作時にLNK2001外部シン...
-
UNIX CP "で上書きしません"
-
PHPでの画像の形式の変換
-
PHPプログラム上で「URLを直接...
-
Let's Encryptで自動更新がされ...
-
ExcelVBAで部分一致(*)をしたい
-
VB6のコンボボックスのテキスト...
-
ASPのResponse.WriteをPHPでは...
おすすめ情報