chỉ vấp phải điều gì đó mà tôi không thể giải thích. Các mã sau đây không biên dịchViệc sử dụng điều này đôi khi có cần thiết không?
template<int a>
class sub{
protected:
int _attr;
};
template<int b>
class super : public sub<b>{
public:
void foo(){
_attr = 3;
}
};
int main(){
super<4> obj;
obj.foo();
}
trong khi đó khi tôi thay đổi _attr = 3;
để this->attr = 3;
có vẻ là không có vấn đề.
Tại sao lại như vậy? Có trường hợp nào bạn phải sử dụng không?
tôi đã sử dụng g++ test.cpp -Wall -pedantic
để biên dịch và tôi nhận được lỗi sau
test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
Đọc trên [hai giai đoạn tra cứu tên] (http://blog.llvm.org/2009/12/dreaded- hai pha-name-lookup.html). (Ngoài ra câu hỏi thường gặp này: [Tại sao tôi gặp lỗi khi lớp có nguồn gốc mẫu của tôi sử dụng thành viên mà nó thừa kế từ lớp mẫu cơ sở?] (Http://www.parashift.com/c++-faq/nondependent-name -lookup-members.html)) – ildjarn