C ++의 기본 클래스에서 보호 된 필드 문제
-
06-07-2019 - |
문제
나는 기본 수업이 있습니다 BassClass
, 일부 필드와 함께 보호를 받았으며 순수한 가상 기능. 그런 다음 파생 클래스는 말합니다 DerivedClass
, 처럼 class DerivedClass : public BassClass
. 파생 된 클래스가 Bassclass에서 보호 된 필드를 상속해서는 안됩니까? DerivedClass를 컴파일하려고 할 때 컴파일러는 DevivedClass가 해당 필드가 없다고 불평합니다. 여기에 무엇이 잘못 되었습니까? 감사해요
해결책
만약에 BassClass
(sic) 및 DerivedClass
템플릿이고 BassClass
액세스하려는 회원 DerivedClass
종속 이름으로 지정되지 않으므로 표시되지 않습니다.
예를 들어
template <typename T> class BaseClass {
protected:
int value;
};
template <typename T> class DerivedClass : public BaseClass<T> {
public:
int get_value() {return value;} // ERROR: value is not a dependent name
};
액세스를 얻으려면 더 많은 정보를 제공해야합니다. 예를 들어, 회원의 이름을 완전히 지정할 수 있습니다.
int get_value() {return BaseClass<T>::value;}
또는 클래스 멤버를 언급하고 있음을 명시하게 만들 수도 있습니다.
int get_value() {return this->value;}
다른 팁
이것은 작동합니다 :
#include <iostream>
struct Base {
virtual void print () const = 0;
protected:
int val;
};
struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};
제휴하지 않습니다 StackOverflow