如果下面的类不是模板,我可以简单地x在derived课堂上.但是,使用下面的代码,我必须使用this->x.为什么?
template <typename T>
class base {
protected:
int x;
};
template <typename T>
class derived : public base<T> {
public:
int f() { return this->x; }
};
int main() {
derived<int> d;
d.f();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 什么是未声明的标识符错误?什么是常见原因以及如何解决它们?
示例错误文本:
error C2065: 'cout' : undeclared identifier'cout' undeclared (first use in this function)以下代码无法编译 - 使用未声明的标识符.我使用GCC和XCode进行编译.
一切都在一个头文件中.
include "MyArray.h"
template <typename T>
class MyBase {
public:
MyBase();
virtual ~MyBase();
void addStuff(T* someStuff);
protected:
MyArray<T*> stuff;
};
template <typename T>
MyBase<T>::MyBase() {}
template <typename T>
MyBase<T>::~MyBase() {}
template <typename T>
void MyBase<T>::addStuff(T* someStuff) {
stuff.add(someStuff);
}
// ---------------------
template <typename T>
class MyDerived : public MyBase<T> {
public:
MyDerived();
virtual ~MyDerived();
virtual void doSomething();
};
template <typename T>
MyDerived<T>::MyDerived() {}
template <typename T>
MyDerived<T>::~MyDerived() {}
template <typename T>
void MyDerived<T>::doSomething() {
T* thingy = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个继承自 Tree 类的二叉搜索树类,但编译器表示 Tree 类的数据成员未在 BST 类中继承。
template <class T>
class Tree {
protected:
class Node {
public:
T value;
Node * left;
Node * right;
};
Node * root;
public:
Tree() : root(NULL) { }
};
Run Code Online (Sandbox Code Playgroud)
template <class T>
class SearchTree : public Tree<T> {
public:
void foo();
};
template <class T>
void SearchTree<T>::foo() {
Node * node = NULL; //error- Unknown type name 'Node'
root = node; //error- Use of undeclared identifier 'root'
}
Run Code Online (Sandbox Code Playgroud)
我希望能够从基类“Tree”访问节点和根。为什么编译器说它们未声明且未知?