依存するスコープを持つネストされたテンプレート
2023-08-02 22:38:13
質問
以下のエラーの文脈で、従属スコープとは何か、typenameの意味は何か?
$ make
g++ -std=gnu++0x main.cpp
main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope
make: *** [all] Error 1
/*
* main.cpp
*/
#include <vector>
#include <memory>
template<typename T>
struct ptrModel
{
typedef std::unique_ptr<T> Type;
};
template<typename Data>
struct ptrType
{
typedef ptrModel< std::vector<Data> >::Type Type;
};
int main()
{
return 0;
}
どのように解決するのですか?
コンパイラは何をすべきか正確に教えてくれました。書く
typename
の前に
ptrModel<std::vector<Data> >::Type
のように
typedef typename ptrModel<std::vector<Data> >::Type Type;
は
理由
この要件の理由は、コンパイラはこの時点では
ptrModel<std::vector<Data> >::Type
がメンバ変数なのかネストされた型なのかがわからないからです。の定義を見てもそれがわからないのです。
ptrModel
の特殊化が存在する可能性があるため
ptrModel
に対して
std::vector<Data>
は、まだ到達していないプログラムのどこか他の場所で、これらのうちどれを変更するのかを示します。
::Type
が参照するものを変更します。だから、明示的に伝える必要があるのです。
名前
ptrModel<std::vector<Data> >::Type
は従属スコープを持っています。
依存する
というのは、テンプレートのインスタンス化にしているスコープにあるからです。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み】ローカル変数のメモリはスコープ外からアクセスできる?
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる