如何解决此问题(基础模板和继承)
how to fix this (fundation templates &inheritance)
引用:enter image description here
/
[C++错误] 家庭作业单元1.cpp(39(: E2102 如果不指定
专用化参数,则无法使用模板"bag"
积分代码: https://drive.google.com/file/d/1wBe7IqHngArjK3WVSN3u-mboKhrMkIao/view?usp=sharing
(使用 Borland C++ Builder(
.h
template <class T>
class bag{
public:
bag(int);//
~bag();
String result();
T *data;
bool empty,full;
protected:
int size,position;
String ans;
};
template <class T>
class stack:public bag<T>{
public:
stack(int);
void push(int);
void pop();
};
template <class T>
class queue:public bag<T>{
public:
queue(int);
void enq(int);
void deq();
};
。.cpp
stack<float> *s;
queue<float> *q;
template<class T>bag<T>::bag(int num){
empty,full=false;
size=num;
data=new T [size];
position=0;
}
template<class T>bag<T>::~bag(){
delete []data;
}
template<class T>String bag<T>::result(){
String ans="";
for(int i=0;i<=position-1;i++){
ans+= AnsiString(data[i]);
}
return ans;
}
**template<class T>stack<T>::stack(int num):bag( num){//how to fix this
}**
我需要添加什么或我的代码有误
由于您继承了bag<T>
,因此您必须将bag<T>
指定为要显式构造的继承类型:
template<class T> stack<T>::stack(int num) : bag<T>(num) {
// Specify the template argument ^^^
这是必需的,因为C++允许多重继承,并且您可以继承同一模板的不同实例:
template <typename> class foo {};
class bar : public foo<int>, public foo<float> {
public:
bar();
};
bar::bar() : foo{} {}
// ^^^
// Same problem, but now it's clear why: which foo instantiation?
// foo<int> or foo<float>?
而且,也许同样重要的是,当你显式调用基类型构造函数时,语法说你必须指定一个类型,而bag
实际上不是一个类型 - 它是一个类型模板。
相关文章:
- 如何解决此问题(基础模板和继承)
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- 使用enable_if解决多重继承歧义
- 继承构造函数和其他变量的解决方法
- 解决虚拟方法的歧义继承的两种方法
- 如何解决多次继承的不明确变量名称?
- C++解决没有虚拟继承的钻石继承问题
- 继承是否是将一组模型参数传递给不同类的可行解决方案
- 模板和unique_ptr继承情况下的重载解决方案
- 如何解决继承类中的注册Q_ENUM
- 引用如何解决多重继承中的歧义
- 如何在C++中解决网格继承问题
- 未解决的外部符号C 用于继承和构造函数
- 虚拟继承如何解决 c++ 中的多重继承(钻石)?它将走哪条路
- 协助解决C++的继承问题
- 为什么私有继承不能解决静态函数的歧义?(在 MSVC 中测试)
- 如何在C++实现继承并解决错误"parent class is not accessible base of child class"?
- 为什么单一的虚拟继承不足以解决可怕的菱形问题?
- 钻石继承的解决方案,但它合适吗
- 通过QObject子类最接近多重继承的解决方案