Два разных класса Двойной связанный список и класс Pair, которые не будут работать вместе

Я пишу программу, которая похожа на ошеломительную, но с гораздо меньшими трудностями. Моя программа предназначена для получения количества строк букв (одинакового количества букв), а затем получения букв в отдельных строках. Исходя из количества слов, которые я собираюсь угадать, и каждой строки после слов, которые я собираюсь угадать
такие как показано ниже:

5
SRENG
OLIOA
VISKE
THAOR
PDTAL
4
LORE
NOSE
ROILS
SAILORS

Вывод будет очевидным, но ничего особенного для этого не нужно, какие слова были найдены, а какие не соответствовали направлению слов, которые следовали:

Такие как:

LORE
"FOUND!""W, NE, E"

Так что теперь вот где это сбивает меня с толку. У меня есть моя основная программа, которая называется scramble.cc, которая включает в себя весь код для решения собственно проблемы, в то время как другие программы, которые я использую, это pair.h, pair.cc, list.h и list.cc (конечно мой компилятор тоже)
Код моей пары:

#include <iostream>
#include <cstdlib>
#ifndef PAIR
#define PAIR

using namespace std;

struct Pair{
int r, c;
Pair(size_t r1, size_t c1);
Pair();
void print(ostream & ostr)const;
size_t get(size_t index);
};
ostream & operator<<(ostream & ostr, const Pair & p);
bool operator==(const Pair & p1, const Pair & p2);
bool operator!=(const Pair & p1, const Pair & p2);

#endif

pair.cc

#include <iostream>
#include <cstdlib>
#include "pair.h"using namespace std;

Pair::Pair(size_t r1, size_t c1)
{
r=r1;
c=c1;
}

Pair::Pair()
{
r=c=0;
}

void Pair::print(ostream & ostr) const
{
ostr << r << "," << c;
}

ostream & operator<<(ostream & ostr, const Pair & p)
{
p.print(ostr)
return ostr;
}

bool operator==(const Pair & p1, const Pair & p2)
{
return p1.r == p2.r and p1.c == p2.c
}

bool operator!=(const Pair & p1, const Pair & p2)
{
return not(p1==p2)
}

Мой List.h:

#include <cstdlib>
#include <iostream>
#include "pair.h"using namespace std;
class List
{
public:
typedef Pair ElementType;
typedef int ElementType //this is what I used before putting in pair.h/.cc

List();
~List();
List(const List & orig)
void add(const ElementType & item, size_t index);
void removeAt(size_t index);
void remove(const ElementType & item)
size_t find(const ElementType & item) const;
ELementType get(size_t index) const;
size_t getSize() const;
void output(std::ostream & ostr) const;

private:
struct Node{
Node *prev;
ELementType data;
Node*next;
Node();
Node(Node *p, Node *n);
Node(Node *p, const ElementType & d, Node *n);
};

void _setCurrentIndex(size_t index) const;

size_t size;
mutable size_t currentIndex;
Node *front;
Node *rear;
mutable Node *current;

};

Мой код list.cc:

#include <iostream>
#include <cassert>
#include <cstdlib>
#include "list.h"
using namespace std;

List::Node::Node()
{
prev = next = NULL;
}

List:: List()
{
front = new Node()
rear = new Node()
front->next = rear;
rear->prev = front;

currentIndex=0;
current = front->next;
size=0;
}

List::~List()
{
_setCurrentIndex(0);
while(current)
{
Node *temp = current;
current = current -> next;
delete temp;
}
//not showing deep copy function b/c it isn't important for this program
void List::add(const ElementType & item, size_t index)
{
assert(0<=index && index <= size);
_setCurrentIndex(index);
size++;

Node *born = new Node;
born->data = item;
born->prev = current->prev;
born->prev->next = current;
born->prev = born;
current = born;
}

void List::removeAt(size_t index)
{
assert(0<=index<=getSize());
_setCurrentIndex(index);

Node *old = current;
current->prev->next = current->next;
current->next->prev = current->prev;
delete old;
size--;
}

void List::remove(const ElementType & item)
{
for(size_t i=0; i<size; i++)
{
_setCurrentIndex(i);
if(find(item)<getSize())
{
Node *tempOld = current;
current->next->prev = current->prev;
current->prev->next = current->next;
current = current->next;

delete tempOld;
size--;
}
}
}

size_t List::find(const ElementType & item) const
{
for(size_t i=0; i<size; i++)
{
_setCurrentIndex(i)
if(get(i) == item)
return get(i);
}
return getSize();
}

List::ElementType List::get(size_t index) const
{
assert(0 <= index < size);
_setCurrentIndex(index);
assert(current->next != NULL);
return current->data;
}

size_t List::getSize() const
{
return size;
}

void List::output(std::ostream & ostr) const
{
for(size_t i=0; i<size; i++)
{
_setCurrentIndex(i);
ostr << current->data << " ";
}
ostr << endl;
}

void List:: _setCurrentIndex(size_t index) const
{
int x;
if(currentIndex > index)
x = currentIndex - index;
else
x = index-currentIndex;

if(index < (sizez_t)x)
{
current = front->next;
curentIndex=0;
while(currentIndex != index)
{
current = current->next;
currentIndex++;
}
}
else if((size-index) < (size_t)x)
{
current = rear;
currentIndex = size;
while(currentIndex != index)
{
current = current->prev;
currentIndex--;
}
}
else
{
if(currentIndex > index)
{
while(currentIndex!=index)
{
current = current->prev;
currentIndex--;
}
}
else
{
while(currentIndex!=index)
{
current = current->next;
currentIndex++;
}
}
}
}

Мой scramble.cc:

#include <iostream>
#include <cstdlib>
#include "list.h"#include "pair.h"using namespace std;

List history;
Pair p1 = Pair(1,1);

int main()
{

}

мой Makefile

scramble: scramble.o list.o pair.o
g++ -o scramble scramble.o list.o pair.o
scramble.o: scramble.cc list.h pair.h
g++ -c scramble.cc
list.o: list.cc list.h pair.h
g++ -c list.cc
pair.o pair.cc pair.h
g++ -c pair.cc

Так что это мой код, я должен был написать это вручную, потому что программа, которую я использую, не копирует и не вставляет, поэтому, пожалуйста, простите меня, если есть небольшие ошибки (такие как забывание или неправильное написание).

Поэтому моя самая большая проблема — когда я пытаюсь создать пары и поместить их в список, он выводит меня из себя, так как я ошибаюсь, что не могу конвертировать Pair в size_t в таких функциях, как Find. Есть также множество неопределенных ссылок List :: List (), List :: ~ List (), Pair :: Pair (без знака long, без знака long), List :: add (Pair const&, unsigned long), List :: getSize () const, List :: removeAt (unsigned long)

Так может кто-нибудь помочь мне с тем, что мне нужно сделать с моим списком и парой? Моя цель — сохранить пары в списке и удалить их, что является моей главной целью для этого.

Большое спасибо, ребята и девочки!

-1

Решение

В качестве совета, вы должны включать значительно меньше кода в будущих сообщениях. Вы с большей вероятностью получите помощь, если сузили проблему до определенного фрагмента кода. Кроме того, точные сообщения об ошибках очень полезны.

Что касается проблемы, которую вы описываете,

это сводит меня с ума из-за того, что я не могу конвертировать Pair в
size_t в таких функциях, как Find

Ваша проблема с этим кодом:

size_t List::find(const ElementType & item) const
{
...
if(get(i) == item)
return get(i);
...
}

List::ElementType List::get(size_t index) const

Обратите внимание, что List::get возвращает List::ElementType а также List::find возвращает size_t, Поэтому утверждение return get(i); пытается вернуть List::ElementType в функции, которая ожидает size_t быть возвращенным. Вы, скорее всего, хотите, чтобы это было return i; вместо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]