すみません、もう1つ質問させてください。
共通の変数と関数を一まとめに作っているのですが
それを多数のファイルから参照するにはどうしたらよいのでしょうか?
今やっている方法ですと、重複宣言になってしまいます。
通常どのようにするのでしょうか?
<現状>
Global.h(グローバルヘッダー)
Global.cpp(グローバル関数処理)
CxxxDlg1.h(既存ヘッダーファイル1)
CxxxDlg1.cpp(既存ファイル1)
CxxxDlg2.h(既存ヘッダーファイル2)
CxxxDlg2.cpp(既存ファイル2)
この4つのファイルがあって
CxxxDlg1.cpp(既存ファイル1)
CxxxDlg2.cpp(既存ファイル2)
の中で「#include Global.h」としています(重複宣言エラー)
どうすれば既存ファイル1と既存ファイル2から共通で同じ変数を参照できるでしょう
か?
基本的な質問なのかもしれませんがよろしくお願いいたします。
まず、設計の問題として、『グローバル変数を使うな』
というのがありますが、
外部リンケージ、内部リンケージについて正確な知識をつけておくことをおすすめします。
extern static のあたりのキーワードを調べてみてください。
ちなみに『宣言』は重複しててもかまいませんよ。
問題なのは多重『定義』です。
#if使って一度しか読ませないようにすればよいのでは・・
(例)MFCウィザード風・・
(Global.hの先頭)
#if !defined(GLOBAL_H__INCLUDED_)
#define GLOBAL_H__INCLUDED_
(Global.hの末尾)
#endif // !defined(GLOBAL_H__INCLUDED_
最近はめっきりexternなんて使わなくなりましたが、
Global.h
#if !defined(GLOBAL_H__INCLUDED_)
#define GLOBAL_H__INCLUDED_
#ifdef __DEFINE_GLOBALS__
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int global_int_variable;
#endif // (GLOBAL_H__INCLUDED_)
Global.cpp
#define __DEFINE_GLOBALS__
#include Global.h
CxxxDlg1.cpp
#include Global.h
「#pragma once」って使えるんだっけ?
>「#pragma once」って使えるんだっけ?
VC6/7でコンパイル通ります。ただ、ほかのコンパイラでは使えない
と思いますが。
Visual C++.NET だと、生成されたヘッダーには
#ifdefine がなくなり #pragma once の1行のみです。
#ifで解決できました。
ありがとうございます。