【发布时间】:2021-02-24 13:52:28
【问题描述】:
我正在使用 C++ 中的这个模板堆栈:
节点:
template <typename TS>
struct spNodoPila {
TS info;
spNodoPila<TS>* next;
};
具有推送和弹出功能的堆栈 ADT 结构:
template <typename TS>
struct ADTPila {
spNodoPila <TS>* head = NULL;
spNodoPila <TS>* pos = NULL;
void push(TS dato) {
spNodoPila<TS>* nodo = new spNodoPila<TS>();
nodo->info = dato;
nodo->next = NULL;
if (head == NULL) {
head = nodo;
}
else {
nodo->next = head;
head = nodo;
}
}
void pop(spNodoPila<TS>*& nodo) {
nodo = new spNodoPila<TS>();
if (head == NULL) {
}
else if (head->next != NULL) {
nodo = head;
pos = head->next;
delete(head);
head = pos;
pos = NULL;
}
else {
nodo = head;
delete(head);
head = NULL;
}
}
};
在前一个结构开头的这段代码中,我在最后一行得到错误“数组类型 TS 不可分配”:
spNodoPila<TS>* nodo = new spNodoPila<TS>();
nodo->info = dato;
需要强调的重要一点是,稍后在代码中我将堆栈作为 str (char[60] typedef) 进行实例化,因为我希望该堆栈能够处理该类型的数据。删除“str”的那些实例,程序编译,所以我想分配char数组的内存可能有问题,或者我正在做某事的方式。实例示例:
Stak 模板 ADTPila 以 "str" (char[60] typedef) 实例化到列表节点中:
struct spNodoLista {
sInfoLista info;
ADTPila <str> cand;
spNodoLista* prev;
spNodoLista* next;
spNodoVotos* vlink;
};
非常感谢您的帮助!
【问题讨论】:
-
错误信息说明了一切——你不能将一个 C 样式数组分配给另一个,所以这一行
nodo->info = dato将失败。 -
你不能用原始数组来做这个。您可以使用
std::array<char>,但基于名称“str”,我认为std::string或简单的包装器(struct mystring { char s[60];};) 可能是更好的选择。 -
包含代码中的这个数组在哪里?我没有看到。很高兴看到与实际问题相关的代码。
标签: c++ templates stack dynamic-memory-allocation