私はここでこの前の質問と同じ問題を抱えていました: テンプレートと継承を使用したC++での宣言されていない識別子の使用
要約すると、子クラスからテンプレートクラスの保護された属性にアクセスしようとします。これを行うための説明された方法はthis->attribute
、だけではなくを使用することattribute
です。問題は、Visual Studio 2012で、プログラムを正しくコンパイルして実行するために、変数参照の前にthis->を追加する必要がなかったのはなぜだろうと思っていました。また、OSX上のgccまたは他のコンパイラでその機能を使用する方法があるかどうか疑問に思いました。
編集:これは、VisualStudio2012でこれをテストするために使用したコードです。
//file a.h
template<class T>
class a
{
public:
a(){value = 2;};
protected:
T value;
};
template<class T>
class b: public a<T>
{
public:
T getValue(){return value;};
};
//file main.cpp
#include <iostream>
#include "a.h"
using namespace std;
int main()
{
b<int> myTest;
cout<<myTest.getValue();
system("pause");
return 0;
}
これはg++を使用してコンパイルされませんが、VisualStudio2012を使用してコンパイルされます。