我是C++新手,我试着写一个简单的继承模板类的片段,我写了这个简单的代码,它给了我这样的错误.
#include <iostream>
using namespace std;
template <class T>
class Base
{
public:
T m_data;
};
template <class T>
class child_template: public Base<T>
{
public:
void print_child()
{
cout << m_data << endl; // error: use of undeclared identifier 'm_data'; did you mean 'child_class::m_data'?
// cout << this->m_data << endl; // no error
}
};
int main()
{
child_template<int> child_obj;
child_obj.m_data = 20;
child_obj.print_child();
return 0;
}
错误如下:
template_cls_inherit.cpp:17:17: error: use of undeclared identifier 'm_data'; did you mean '__nl_cat_d::__data'?
cout << m_data << endl; // error: use of undeclared identifier 'm_data'; did you mean 'child_class::m_data'?
^~~~~~
__nl_cat_d::__data
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/nl_types.h:90:8: note: '__nl_cat_d::__data' declared here
void *__data;
^
template_cls_inherit.cpp:17:17: error: '__nl_cat_d::__data' is not a member of class 'child_template<int>'
cout << m_data << endl; // error: use of undeclared identifier 'm_data'; did you mean 'child_class::m_data'?
^~~~~~
template_cls_inherit.cpp:26:15: note: in instantiation of member function 'child_template<int>::print_child' requested here
child_obj.print_child();
^
2 errors generated.
虽然我使用了this->m_data
而不是m_data
并且错误消失了,但我仍然不明白为什么我应该使用this
指针?