C++ 名前空間と前方宣言

描主宇田川浩行K#F85E
上描き希哲7年(2013年)
05月11日 09:13
下描き希哲6年(2012年)
06月21日 22:38
利承
ライセンス
希哲館普通利承(KULクール

C++(少なくとも C++03)では,名前空間に属するクラス等の前方宣言をする際に「::」は使えない。いちいち namespace ブロックで囲い,宣言してやる必要がある。

以下,名前空間 nsA に属するクラス classA を,nsA に属さない classB から参照したい場合の二例。

まずは失敗例。

# 不可。ここでコンパイル エラー。

class nsA::classA;

class classB

{

# ここで参照したい。

nsA::classA dataA;

}

次に成功例。

namespace nsA

{

# 可。名前空間が入れ子になっている場合は,ブロックも入れ子で記述する。

class classA;

}

class classB

{

# ここで参照したい。

nsA::classA dataA;

}

冗長かつ(コードとして)非直感的すぎるので,が知らない別のやり方があるのかもしれないとも思うのだが,C++ はこの手の問題が色々あるから,やっぱり単に仕様整備が追いつかなかっただけかな……。

広告

出力論組プログラム虎哲*イチ 1.01
制作・運営:希哲社
© K1-13 (2007-2019) KiTetuSha