[解決済み] 名前空間stdでテンプレートクラスをフォワード宣言するには?
質問
#ifndef __TEST__
#define __TEST__
namespace std
{
template<typename T>
class list;
}
template<typename T>
void Pop(std::list<T> * l)
{
while(!l->empty())
l->pop();
}
#endif
で、その関数をmainで使用しました。エラーが出ます。もちろん、私は、より多くのテンプレート・パラメータが
std::list
(allocatorだと思う)。しかし、それは重要な点ではありません。テンプレートクラスの完全なテンプレート宣言を知っていなければ、それを前方宣言することはできないのでしょうか?
EDIT:以前はポインタを使用していませんでした - 参照でした。ポインターで試してみます。
どのように解決するのですか?
問題は、テンプレートクラスを前方宣言できないことではありません。たしかに、テンプレートのパラメータをすべて知っておく必要はありますが とそのデフォルトである を正しく宣言できるようにする必要があります。
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
しかし,このような前方宣言をするにも
namespace std
は標準では明示的に禁止されています。
のみ
に入れることが許されているのは
std
はテンプレート
特殊化
であり、一般的に
std::less
のような、ユーザー定義の型に関するものです。必要であれば、他の誰かが関連するテキストを引用することができます。
ただ
#include <list>
にして、気にしないようにしましょう。
ああ、ちなみに、ダブルアンダースコアを含む名前は、実装で使用するために予約されているので、次のようなものを使用する必要があります。
TEST_H
の代わりに
__TEST__
. 警告やエラーは発生しませんが、プログラムが実装で定義された識別子と衝突した場合、コンパイルや実行が正しく行われる保証はありません:それは
不正確な
. また、アンダースコアで始まり、大文字で終わる名前なども禁止されています。一般的に、どんな魔法を扱っているかわからない限り、アンダースコアで物事を始めるのはやめましょう。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] C++でインターフェイスを宣言するには?
最新
-
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++でint型に無限大を設定する
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] C++の識別子でアンダースコアを使用する場合のルールについて教えてください。