ここには、保護されたメンバー変数を使用する古いコードベースがあります。これが良い考えであるかどうかは議論することができます。しかし、コードはgcc3でうまくコンパイルされていなければなりません。 私はそう派生クラス内のクラスの保護されたメンバーにアクセス
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
とクリーンアップのメソッド宣言(のようにクラステンプレートはFooから保護部材Xを使用して派生テンプレートクラスのバーを持っている)これがないのx
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
で行わものがありますgcc3で動作するはずですが、gcc4では動作しません。それを変更すると機能します
doSomeThingCleanUpLike (this->x);
なぜそうですか?
「テンプレートクラス」という用語は、しばしば混乱の原因となります。ものはクラスのテンプレートなので、正しい用語は "クラステンプレート"です。それはクラスではありません。私はあなたの質問を編集するだろうが、おそらくあなたが混乱した理由の一つです。 – MSalters
"クリーンアップ"の関数定義に準拠していません。戻り値の型と "Bar"のテンプレート引数がありません。確かにそれはあなたのコードの中にありますか? –
ありがとうlitb。私はそれを変えた。カフェインのレベルはそれを見つけ出すのに十分ではありませんでした。 「クラステンプレート」に変更されました。 そのテンプレートクラスまたはクラステンプレートが問題に影響しないかどうか。この用語はちょっと非公式に使われています。 – GeeF