我正在用C++处理这个模板堆栈:
节点:
template <typename TS>
struct spNodoPila {
TS info;
spNodoPila<TS>* next;
};
带有push和pop函数的堆栈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;
需要强调一点是,在代码后面,我将堆栈实例化为字符串(char[60]typedef),因为我希望该堆栈处理该类型的数据。移除那些“str”的实例,程序会编译,所以我猜可能存在一个问题,分配char数组的内存,或者在我做某事的方式。实例示例:
以“str”(char[60]typedef)为例的Stak模板ADTPila到列表节点中:
struct spNodoLista {
sInfoLista info;
ADTPila <str> cand;
spNodoLista* prev;
spNodoLista* next;
spNodoVotos* vlink;
};
非常感谢你的帮助!
就像注释部分中指出的那样,问题非常简单:我试图将一个字符数组直接分配给“nodo->info=dato;”中的另一个字符数组,所以我用strcpy(dato->info,dato)解决了这个问题。