我使用的指导方针,以创建doublylinkedlist在引导它告诉我使用节点(数据:常量字符串&),但是当我去创造的构造这一点,抛出“错误:预期的构造函数,析构函数或类型转换前'(' 令牌doublylinkedlist ::节点::节点(数据)”
#ifndef __DOUBLYLINKEDLIST_H__
#define __DOUBLYLINKEDLIST_H__
//
//
#include <iostream>
#include <string>
using namespace std;
template <class s>
class doublylinkedlist {
public:
doublylinkedlist();
~doublylinkedlist();
void append (s& data);
void insertBefore (s& data);
void remove (s& data);
bool empty();
void begin();
void end();
bool next();
bool prev();
bool find(s& data);
string data;
const string &getData(){return data;}
private:
class Node
{
public:
Node(const string &data){}
~Node();
Node(s& data);
Node* next;
Node* prev;
string *data;
};
Node* head;
Node* tail;
Node* current;
};
template <class s>
doublylinkedlist<s>::Node::Node(data)
{
this->data;
this->next=nullptr;
this->prev=nullptr;
}
在
template <class s>
doublylinkedlist<s>::Node::Node(data)
{
this->data; // whups! Something should be assigned here. this->data = data;
this->next=nullptr;
this->prev=nullptr;
}
doublylinkedlist<s>::Node::Node(data)
不提供data
的数据类型。它应该是
doublylinkedlist<s>::Node::Node(const string &data)
相匹配的声明。
这就是你目前看到的bug。可是等等!还有更多!
doublylinkedlist<s>::Node::Node(const string &data)
不只是在类中声明,它不小心被定义!它需要减肥的花括号。
Node(const string &data){}
必须成为
Node(const string &data);
否则,编译器会发现构造函数的两个实现和失败。
但是,这并不真正意义。该节点应存储s
,不string
,所以
Node(const s &data){}
真正需要
Node(const s &data);
和
doublylinkedlist<s>::Node::Node(const string &data)
一定是
doublylinkedlist<s>::Node::Node(const s &data)
旁注:
我们建议您不要使用using namespace std;
。 Explanation here。你不应该在一个头在全局范围内使用它,因为它包括了头的任何文件,现在可以为一个非常讨厌的惊喜是英寸
此外
Node(const s &data);
可能成为
Node(const s &data): data(data), next(nullptr), prev(nullptr){}
并消除的需要
doublylinkedlist<s>::Node::Node(const s &data)
完全。该:
启动一个Member Initializer List,一种工具,是很大的教导下,考虑到它的重要性。
在同一范围内重复相同的变量名被称为阴影。不这样做,除非你能不能找到一个替代(你总是可以),因为它是因为它混淆了人。他们可以很容易地得到搞砸了两个data
变量。
用户定义的构造函数声明和定义应该匹配。在构造函数中定义的data
没有一个类型。你的构造应该是这样的:
template <class s>
doublylinkedlist<s>::Node::Node(s& data)
{
this->next=nullptr;
this->prev=nullptr;
}
下面的线没有做任何事情。因此,它可以被删除。或与data
参数分配。
this->data; // this->data = data; ??
此外using namespace std;
内的头文件被认为是不好的做法,甚至可能会导致错误。
看到这个帖子:Why is “using namespace std” considered bad practice?