staticヘッダファイルでの定義による危害

752 ワード

staticの3つの使い方
(1)局所静的変数(2)外部静的変数/関数(3)静的データメンバー/メンバー関数
static変数を参照するには注意してください.
staticのローカル性のため、グローバル静的変数は彼のファイルを宣言する以外に表示されません.正確には定義からファイルの最後まで.
1.ヘッダファイルにstatic変数を定義し、複数のファイルに参照されると、コンパイルはスムーズに通過します!すなわち、ヘッダファイルが何回含まれているか、これらの変数は何回定義されているか.
2.C++クラスで定義された静的変数もヘッダファイルでは初期化できません.必ずcppで初期化してください.問題は発見しにくい.
2.1例えばtest.cppはクラスtestclassを参照し、testclassクラスで静的変数を定義し、testclass.hで初期化
class testclass{
static string teststr;
}
string testclass::teststr="";

コンパイルの実行に問題はありません
2.2クラスmyclass、myclassを定義します.cpp中
#include “testclass.h”

test.cppに#include“myclass.h”を追加
再コンパイルでエラーが発生し、teststrが何度も定義されていると考えられます.
multiple definition of `cgi::testclass::teststr'