tôi cố gắng thiết kế mẫu cho dự án đại học của mình. i đã viết mã follwing:mẫu lớp C++
#ifndef _LinkedList_H_
#define _LinkedList_H_
#include "Link.h"
#include <ostream>
template <class L>//error one
class LinkedList
{
private:
Link<L> *pm_head;
Link<L> * pm_tail;
int m_numOfElements;
Link<L>* FindLink(L * dataToFind);
public:
LinkedList();
~LinkedList();
int GetNumOfElements(){return m_numOfElements;}
bool Add(L * data);
L *FindData(L * data);
template <class L> friend ostream & operator<<(ostream& os,const LinkedList<L> listToprint);//error two
L* GetDataOnTop();
bool RemoveFromHead();
L* Remove(L * toRemove);
templete này sử dụng lớp liên kết templete
#ifndef _Link_H_
#define _Link_H_
template <class T>//error 3
class Link
{
private:
T* m_data;
Link* m_next;
Link* m_prev;
public:
Link(T* data);
~Link(void);
bool Link::operator ==(const Link& other)const;
/*getters*/
Link* GetNext()const {return m_next;}
Link* GetPrev()const {return m_prev;}
T* GetData()const {return m_data;}
//setters
void SetNext(Link* next) {m_next = next;}
void SetPrev(Link* prev) {m_prev = prev;}
void SetData(T* data) {m_data = data;}
};
error one: shadows template parm `class L'
error two:declaration of `class L'
error three: shadows template parm `class T'
tôi không hiểu vấn đề là gì. tôi thực sự có thể sử dụng sự giúp đỡ của bạn cảm ơn bạn :)
xin lỗi nhưng tôi không hiểu những gì tôi cần đổi tên và tại sao? –
@inna karpasas: Xem chỉnh sửa của tôi. –
Đồng thời, hãy xem xét việc thay đổi chức năng mẫu 'friend' cho một' người bạn 'không đồng bộ. Bạn không cần (cũng không muốn) cung cấp quyền truy cập vào các lớp bên trong của bạn (trong trường hợp này là 'LinkedList ' đối với một kiểu cụ thể 'A') cho tất cả các instantiations của một toán tử' templated << '. Bạn chỉ cần 'toán tử << (ostream &, const LinkedList &)' để truy cập lớp. Lưu ý rằng 'A' là * chung * cho cuộc thảo luận, nhưng đây không phải là một trình giữ chỗ, nhưng là một kiểu cụ thể (' int', hoặc 'double', nhưng một cái cụ thể) –