C ++,模板,编译器错误[重复]
Posted
技术标签:
【中文标题】C ++,模板,编译器错误[重复]【英文标题】:C++, template, compiler error [duplicate] 【发布时间】:2010-12-27 16:26:36 【问题描述】:可能重复:Why doesn't a derived template class have access to a base template class' identifiers?
以下程序的翻译
啊.h
#ifndef A_H
#define A_H
template <class T>
class A
protected :
T a;
public:
A(): a(0)
;
#endif
B.h
#ifndef B_H
#define B_H
template <class T>
class A;
template <class T>
class B: public A <T>
protected:
T b;
public:
B() : A<T>(), b(0)
void test () b = 2 * a; //a was not declared in this scope
;
#endif
导致错误:“a 未在此范围内声明”。 (Netbeans 6.9.1)。
但是建设
void test () b = 2 * this->a;
是正确的...问题出在哪里?
使用前向声明或文件包含指令更好吗?
B.h
template <class T>
class A;
对比
#include "A.h"
【问题讨论】:
阅读comeaucomputing.com/techtalk/templates/#whythisarrow 重复Why doesn't a derived template class have access to a base template class' identifiers? 【参考方案1】:A<T>::a
是一个依赖名,所以不能无条件使用。
想象一下在某处有一个A<int>
的特化:
template<> class A<int> /* no a defined */ ;
编译器现在应该做什么?或者如果A<int>::a
是一个函数而不是一个变量呢?
确认您对a
的访问权限,因为您已经发现了this->a
,一切都会正常进行。
【讨论】:
哦,我多么喜欢在没有任何解释的情况下被否决:( 你的答案是正确的。赞成制衡。以上是关于C ++,模板,编译器错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章