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次元配列...
-
PHPでの画像の形式の変換
-
UNIX CP "で上書きしません"
-
protectedなのにアクセスできな...
-
[C++]std:mapの扱いを教えて頂...
-
既存関数の上書き
-
python の import エラー Modul...
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
構造体の入れ子が構造体の場合...
-
VB6のコンボボックスのテキスト...
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
「取得先」という表現について
-
バッチファイルでpingの結果を...
-
DTOとEntityの差は何ですか。
-
WordでExcelデータを差込...
-
【C#】DataGridViewの最大列数...
-
shシェルスクリプト 空白行の...
-
VBS「開いているページ」のURL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
エラーの理由が分りません。Pri...
-
VB.NETSystem.Xml 要素数を得る...
-
vb作成したらでbeep音が鳴りま...
-
どういうプログラムを関数化を...
-
.htaccessについて
-
ExcelVBAで部分一致(*)をしたい
-
DLL内でnewしたインスタンスを...
-
VB6のコンボボックスのテキスト...
-
protectedなのにアクセスできな...
-
既存関数の上書き
-
UNIX CP "で上書きしません"
-
[CakePHP] Paginatorのリンクが変
-
PHPでの画像の形式の変換
-
サブネットマスクを用いたIP制...
-
classの再定義エラーについて
-
Smarty変数の値をJavascript変...
-
PHP、ヒアドキュメント内でのIF...
-
PHPの名前空間インポートについて
おすすめ情報