我在这里遇到了与上一个问题相同的问题: 使用模板和继承在 C++ 中使用未声明的标识符
总而言之,我们尝试从子类访问模板类的受保护属性。所描述的执行此操作的方法是使用this->attribute
而不是仅attribute
. 问题是,我想知道 Visual Studio 2012 为何不需要在变量引用前添加 this-> 以使程序正确编译和执行。我还想知道是否有办法在 gcc 或 OS X 上的其他编译器中使用该功能。
编辑:这是我在 Visual Studio 2012 中用来测试的代码。
//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++ 编译的,而是使用 Visual Studio 2012 编译的。