在模板和继承C++中使用未声明的标识符
Use of undeclared identifier in C++ with templates and inheritance
以下代码无法编译 - 使用未声明的标识符。我使用 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 = new T();
addStuff(thingy); //here's the compile error. addStuff is not declared.
}
有人有解释吗?提前感谢!
试试
this->addStuff(thingy);
这是
由于模板继承。在这种情况下,您应该指定使用基本方法:
template <typename T>
MyDerived<T>::doSomething() {
using MyBase<T>::addStuff;
T* thingy = new T();
addStuff(thingy);
}
或者通过这个指针来做:
template <typename T>
MyDerived<T>::doSomething() {
T* thingy = new T();
this->addStuff(thingy);
}
有几个问题:
- 类定义后缺少分号。
- 缺少
doSomething
方法声明/定义的类型。 - 缺少用于定义
addStuff
方法的类型。
修复后,它似乎可以工作。
编辑:由于您已经修复了语法错误,但它仍然不起作用。正如其他人所建议的那样,编译器可能要求您使用this->
前缀调用 addStuff
方法:
this->addStuff(thingy);
使用此指针调用addStuff方法,即
this->addStuff(thingy);
相关文章:
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 我的函数调用 (C++) 中的未声明标识符
- 具有继承的未声明标识符(运算符 ostream)
- 无法确定 IDE 在 C++ 中说出未声明标识符的原因
- 错误 C2065:'lO':用于声明向量值的未声明标识符?
- 可变参数模板的未声明标识符
- 动态变量上的c++MACRO未声明标识符
- 指向对象的指针的未声明标识符向量
- 简单C++程序上的多个未声明标识符
- C++类"未声明标识符"
- 计算文本文件中的整数数(使用 fin>>x 的未声明标识符)
- 编译器错误 xcode 未声明标识符 C++
- 直接 X 11 纹理 FX 文件错误 X3004 未声明标识符"input"
- GCC 未声明标识符"_asm"
- ios_base类的C++未声明标识符
- 未声明标识符SQL_SS_TABLE
- 使用arrayfire的未声明标识符
- 未声明标识符和标识符未定义是什么意思?如何修复错误
- 在 MacOS 上使用 OpenMPI C++语法时未声明标识符'MPI'