我不明白為什么在 main 中的 void 函式中,當從鏈表呼叫函式時,客戶端串列上的錯誤是每個clientList上的“C 缺少變數模板引數串列” 。奇怪的是,除了main,我的其他班級沒有錯誤。
template< class TYPE >
LinkedList<Client> clientList;
void showClientListState()
{
cout << "Premier client: ";
clientList.front().writeClientInfo();
cout << "Dernier client: ";
clientList.back().writeClientInfo();
cout << "\n\n";
}
如果你想檢查我的其余代碼:
鏈表
#pragma once
#include "List.h"
template< class TYPE >
class LinkedList : public List<TYPE>
{
public:
LinkedList()
{
this->first = nullptr;
this->last = nullptr;
this->nbElements = 0;
}
~LinkedList()
{
while (!isEmpty())
{
pop();
}
}
void push(const Node<TYPE>& content)
{
Node<TYPE>* ptrClient = new Node<TYPE>(content);
if (isEmpty()) {
this->first = ptrClient;
this->last = ptrClient;
}
else
{
last->setNext(ptrClient);
last = ptrClient;
}
nbElements ;
}
void pop()
{
if (isEmpty()) {
throw EmptyList();
}
Node<TYPE>* tempNodel;
tempNodel = first;
if (first == last)
{
first = last = nullptr;
}
else
{
first = first->getNext();
}
delete tempNodel;
nbElements--;
}
Node<TYPE>& front()
{
if (isEmpty())
{
throw EmptyList();
}
return *first->getContent();
}
Node<TYPE>& back()
{
if (isEmpty())
{
throw EmptyList();
}
return *last->getContent();
}
bool isEmpty() const
{
return (first == nullptr && last == nullptr);
}
int size() const
{
return nbElements;
}
private:
LinkedList(const ClientList&);
Node<TYPE>* first;
Node<TYPE>* last;
int nbElements;
};
串列界面
#pragma once
#pragma once
#include "EmptyList.h"
template< class TYPE >
class List
{
public:
// Ajoute un élément à la fin de la file.
// Postconditions : nbElements devra être incrémenté de 1.
virtual void push(const TYPE& content) = 0;
// Enlève un élément au début de la file.
// Précondition: nbElements > 0. Postcondition: nbElements sera décrémenté de 1.
virtual void pop() = 0;
// Retourne l’élément au début de la file.
// Précondition: nbElements > 0.
virtual TYPE& front() = 0;
// Retourne l’élément à la fin de la file.
// Précondition: nbElements > 0.
virtual TYPE& back() = 0;
// Retourne true si la file est vide ou false sinon.
virtual bool isEmpty() const = 0;
// Retourne le nombre d’éléments dans la file.
virtual int size() const = 0;
};
節點類
#pragma once
template< class TYPE >
class Node
{
public:
Node(const TYPE& content)
{
setContent(content);
setNext(nullptr);
}
~Node()
{
delete content;
}
Node* getNext()
{
return this->next;
}
void setNext(Node* next)
{
this->next = next;
}
//Retourne le contenu de cet élément.
TYPE* getContent()
{
return this->content;
}
//Change la contenu de cet élément.
void setContent(const TYPE& content)
{
this->content = new TYPE(content);
}
private:
Node* next = nullptr;
TYPE* content = nullptr;
};
除了從模板創建鏈接串列之外,我無法觸及的主要內容
#include <iostream>
#include <vld.h>
#include "LinkedList.hpp"
#include "Client.h"
using namespace std;
LinkedList<Client> clientList;
template< class TYPE >
void showClientListState()
{
cout << "Premier client: ";
clientList.front().writeClientInfo();
cout << "Dernier client: ";
clientList.back().writeClientInfo();
cout << "\n\n";
}
template< class TYPE >
void manageClientAdd(const Client& client)
{
cout << "Ajout d'un client\n";
clientList.push(client);
showClientListState();
}
template< class TYPE >
void manageClientRemove()
{
cout << "Retrait d'un client\n";
if (clientList.isEmpty())
{
cout << "La liste était déja vide\n\n";
return;
}
clientList.pop();
if (clientList.isEmpty())
cout << "La liste est maintenant vide\n\n";
else
showClientListState();
}
template< class TYPE >
void main()
{
setlocale(LC_ALL, "fr-CA");
cout << "\nUtilisation de la liste de clients.\n\n";
Client client1(1, "Télesphore", "LeGamer");
Client client2(2, "Herménégide", "LaVedette");
Client client3(3, "Leopoldine", "LaSportive");
Client client4(4, "Amidala", "LaPrincesse");
manageClientAdd(client1);
manageClientAdd(client2);
manageClientAdd(client3);
manageClientAdd(client4);
for (int i =0; i < 5; i )
manageClientRemove();
system("Pause");
}
uj5u.com熱心網友回復:
代替
template<class TYPE>
LinkedList<Client> clientList;
你想寫
LinkedList<Client> clientList;
也就是說,洗掉template<class TYPE>的宣告之前的clientList。您不想clientList成為一個新的變數 template,您希望它成為一個恰好具有模板實體型別的變數。
uj5u.com熱心網友回復:
除了 Brians 的回答之外,在您的“Main”代碼中,洗掉所有“template< class TYPE >”。
因此:
template< class TYPE >
void showClientListState()
{
...
必須是
void showClientListState()
{
...
和同樣的
template< class TYPE >
void manageClientAdd(const Client& client)
{
...
template< class TYPE >
void manageClientRemove()
{
template< class TYPE >
void main()
{
這些函式都不應該或不能依賴于任何模板引數。代碼中唯一依賴于模板引數的是LinkedList直接。但LinkedList<Client>ALSO 不依賴于模板引數,因為您使用Client.
因此,對于showClientListState更改:
template< class TYPE >
LinkedList<Client> clientList;
void showClientListState()
{
進入
#include "Client.h"
LinkedList<Client> clientList;
void showClientListState()
{
這些只是明顯的錯誤。要獲得完整答案,您必須提出整個問題。但不要只是上傳更多的代碼。生成一個可重現的示例。這對于提出一般問題很重要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/339992.html
上一篇:列印出向量陣列中的特定長度
