gpt4 book ai didi

c++ - bool 运算符缺少模板参数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:13 26 4
gpt4 key购买 nike

我目前正在创建一个循环双向链表作为练习。该练习正在对这该死的东西进行模板化,这被证明是非常痛苦的。经过很多很多错误消除后,我得到了更多错误。我会 mock 那个,但我现在非常疲倦和精疲力竭。

Node.h

template<class T>
class Node
{
public:
Node(T val) : data(val), next(0), prev(0) {}
Node(T val, Node *next, Node *prev) : data(val), next(next), prev(prev) {}
Node() : data(0), next(0), prev(0) {}
~Node()
{}

Node *next;
Node *prev;
T data;
};

.

LinkedList.h // Superclass

#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_

#include "Node.h"

enum Direction
{
Forward,
Backward
};

template<class T>
class LinkedList
{
public:
virtual void push_back(T data) = 0;
virtual void push_front(T data) = 0;

virtual void pop_back() = 0;
virtual void pop_front() = 0;

virtual void insert_before(T data, int index) = 0;
virtual void insert_after(T data, int index) = 0;

virtual void pop_before() = 0;
virtual void pop_after() = 0;

virtual void display(Direction direction = Forward) = 0;
virtual int length() const = 0;

virtual T operator[](int index) = 0;
virtual Node<T> *operator()(T data) = 0;
};

#endif

.

CDLinkedList.h // Circular Doubly-Linked List

template<class T>
class CDLinkedList : public LinkedList<T>
{
public:
/* Functions go here */
Node<T> *operator()(T data)
{
Node<T> *temp = head;
for( int i(0);
i < length()-1 && temp->data != data;
++i, temp = temp->next )
continue;

if( temp->data == data )
return temp;
else
{
std::cerr << "Error: Element not found." << std::endl;
return 0;
}
}

void display(Direction direction = Forward)
{
std::ostream_iterator<T> oIter(std::cout, " ");
if( direction == Forward )
{
Node<T> *temp = head;
for( int i(0); i < length(); ++i, temp = temp->next )
oIter = temp->data;
}
else
{
Node<T> *temp = tail;
for( int i(0); i < length(); ++i, temp = temp->prev )
oIter = temp->data;
}
}

.

#include <iostream>
#include <vector>

int main( int argc, char** argv )
{
using std::cout;
using std::endl;
using std::cin;
using std::string;

CDLinkedList<std::string> list;
list.push_back("Hello");
list.push_back(",");
list.push_back("World.");
cout << "Displaying normally..." << endl;
list.display();
cout << "Displaying backwards..." << endl;
list.display(::Direction::Backward);

cin.get();
return 0;
}

模板使用 int 作为输入,但不使用字符串,这是我目前正在尝试开始工作的。

最后一个函数Node *operator()(T data)是我目前的问题 child 。我得到的错误是:

error C2784: 'bool std::operator !=(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'std::string'

这里有什么问题吗?

最佳答案

您缺少 std::string 的比较运算符.尝试添加一个

#include <string>

在您的源文件中包含 main .

包括<iostream>为您提供 std::string 的前向声明.那是因为 <iostream>允许您执行大量字符串操作(例如,它允许您使用字符串流将字符串从/转换为几乎任何内容)。但是,此前向声明不会为您提供任何比较运算符。您需要包括 <string>为此。

对于它的值(value),您可以将测试用例最小化为

#include <iostream>

bool f() {
std::string a, b;
return a != b;
}

来演示这个问题。该测试用例由于完全相同的原因而无法编译,包括 <string>让它发挥作用。

关于c++ - bool 运算符缺少模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com