[解決済み] 名前空間内のクラスをダブルコロンで順次宣言できないのはなぜですか?
質問
class Namespace::Class;
なぜ、こんなことをしなければならないのか。
namespace Namespace {
class Class;
}
VC++ 8.0を使用すると、コンパイラの問題が発生します。
エラー C2653: 'Namespace' : はクラス名または名前空間名ではありません。
この問題はコンパイラが
Namespace
はクラスなのか名前空間なのか? しかし、これは単なる前方宣言なので、なぜこれが問題になるのでしょうか?
ある名前空間で定義されたクラスを前方に宣言する他の方法はありますか? 上記の構文は、名前空間を開き直して、その定義を拡張しているように感じます。 もし
Class
で定義されていない場合は
Namespace
? この場合、どこかのタイミングでエラーになるのでしょうか?
解決方法は?
なぜなら、できないからです。C++言語では、完全修飾名は、以下のものを参照するためにのみ使用されます。 既存 (すなわち、以前に宣言された)エンティティ。を導入するために使うことはできません。 新しい のエンティティを含む。
そして、あなたは
は
実際には、新しいエンティティを宣言するために名前空間を開き直す必要があります。もし、クラス
Class
が後で別の名前空間のメンバーとして定義された場合、それはここで宣言したものとは全く関係のない別のクラスとなります。
になったら、今度は
定義
を宣言した後、再度名前空間を開く必要はありません。グローバル・ネームスペース(または、あなたのクラスが含まれるネームスペース)で定義することができます。
Namespace
というように)。
class Namespace::Class {
/* whatever */
};
名前空間ですでに宣言されているエンティティを参照しているので
Namespace
を使用すると、修飾名
Namespace::Class
.
関連
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] C++でenumを前方に宣言する
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] JavaScriptで名前空間を宣言するには?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み】std::unique_ptr<T>はTの完全な定義を知るために必要なのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] 内部クラスをフォワード宣言するには?[重複している]。