相关疑难解决方法(0)

为什么我必须通过this指针访问模板基类成员?

如果下面的类不是模板,我可以简单地xderived课堂上.但是,使用下面的代码,我必须使用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)

c++ inheritance templates c++-faq

184
推荐指数
3
解决办法
2万
查看次数

什么是"未声明的标识符"错误,如何解决?

什么是未声明的标识符错误?什么是常见原因以及如何解决它们?

示例错误文本:

  • 对于Visual Studio编译器: error C2065: 'cout' : undeclared identifier
  • 对于GCC编译器: 'cout' undeclared (first use in this function)

c++ compiler-errors declaration undeclared-identifier

46
推荐指数
4
解决办法
28万
查看次数

在C++中使用未声明的标识符以及模板和继承

以下代码无法编译 - 使用未声明的标识符.我使用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)

c++ inheritance templates

12
推荐指数
3
解决办法
1万
查看次数

派生类不从基类继承数据成员

我正在尝试创建一个继承自 Tree 类的二叉搜索树类,但编译器表示 Tree 类的数据成员未在 BST 类中继承。

树.h

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)

BST.h

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”访问节点和根。为什么编译器说它们未声明且未知?

c++ inheritance inner-classes

2
推荐指数
1
解决办法
807
查看次数