我试图在模板类中使用嵌套类。请参见下面的代码片段:模板类中嵌套类的问题
template <class T>
class OutterTemplate {
public:
class InnerBase {
protected:
const char* name_;
public:
virtual void print() {
cout << name_ << endl;
}
void setName(const char* n) {
name_ = n;
}
};
private:
class Inner : public InnerBase {
public:
virtual void print() {
cout << name_;
cout << " and ";
InnerBase::print();
}
};
public:
static InnerBase* getInner() {
return new Inner();
}
};
int main() {
auto q = OutterTemplate<int>::getInner();
q->setName("Not working");
q->print();
}
我有错误“错误:‘名_’不是在这个范围内声明”,试图编译这段代码时。我检查“outter”是不是模板类,不存在这样的问题。任何人都可以解释为什么模板类出现此错误,以及如何在模板类内部嵌套类的情况下启用对基类成员的访问?
你需要'this-> name_' – 0x499602D2
@juanchopanza直到尽管我还不确定为什么编译器可以这样做......它必须将“Inner”as和InnerBase定义为相关的类名称...... – IdeaHat
@MadScienceDreams如果您更容易忽略外部类。 InnerBase和Inner都是类模板。 – juanchopanza