Карта сайта

Это автоматически сохраненная страница от 19.06.2013. Оригинал был здесь: http://2ch.hk/b/res/50162622.html
Сайт a2ch.ru не связан с авторами и содержимым страницы
жалоба / abuse: admin@a2ch.ru

Срд 19 Июн 2013 21:58:07
ПУТИН НЕ МОЖЕТ СОБРАТЬ ГОВНОКОД
Сосоны, глаза замылились. Не понимаю, что за ошибка в 25 строки. Прошу помочь

#include <stdlib.h>

const ListOk= 0;
const ListNotMem= 1;
const ListEnd= 3;
typedef long long BaseType;
typedef struct element *ptrel;
typedef struct
{
BaseType data;
ptrel next;
}element;
typedef struct
{
ptrel Start;
ptrel ptr;
unsigned int N;
}List;
short ListError;
void InitList(List *L)
{
L->Start= (ptrel) malloc(sizeof(element));//фиктивный элемент
L->ptr= L->Start;
L->N= 0;
L->Start->next= NULL;
}

void PutList(List *L, BaseType E)
{
if(L->ptr->next != NULL)
{
ptrel tmp= L->ptr->next->next;
L->ptr->next= (ptrel) malloc(sizeof(element));
L->ptr->next->next= tmp;
L->ptr->next->data= E;
L->N+= 1;
}
else
{
L->ptr->next= (ptrel) malloc(sizeof(element));
L->ptr->next->next= NULL;
L->ptr->next->data= E;
L->N+= 1;
}
}

void GetList(List *L, BaseType *E)
{
if(L->ptr->next != NULL)
{
ptrel tmp= L->ptr->next->next;
*E= L->ptr->next->data;
free(L->ptr->next);
L->ptr->next= tmp;
L->N-= 1;
}
}


void ReadList(List *L, BaseType *E)
{
if(L->ptr->next != NULL)
{
*E= L->ptr->next->data;
}
}

int EndList(List *L)
{
if(L->next->next == NULL) return 1;
else return 0;
}

void BeginPtr(List *L)
{
L->ptr= L->Start;
}

voide MovePtr(List *L)
{
if(!Endlist(L))
{
L->ptr->next= L->ptr->next->next;
}
}



Срд 19 Июн 2013 21:59:24
Похоже сраный typedef играет злую шутку

Срд 19 Июн 2013 22:00:18
list.h:25:13: ошибка: доступ по указателю на неполный тип

Срд 19 Июн 2013 22:02:46
>>50162622
Я тебе, сука, еще и строчки считать должен? Ты покажи где конкретно.

Срд 19 Июн 2013 22:04:11
>>50162906
В initList
L->Start->next= NULL;
А строчки считают все годные текстовые редакторы

Срд 19 Июн 2013 22:07:06
>>50163023
Зачем полез в передаваемый список? Ты конструктор копирования там делаешь или как?

Срд 19 Июн 2013 22:09:47
>>50163216
Ололо, крестоносцы пожаловали. Короче у меня лаба, прототипы функций даны, нужно написать реализацию. InitList должен создать дескриптор списка. Там будет лежать указ-ль на 1й элемент, указательна какой-то текузий элемент и к-во элементов.

Срд 19 Июн 2013 22:11:09
Гугл сказал, что подобная ругань бывает, если мы обращаемся к полю объекта, который не является структурой. Но ведь сука он является!

Срд 19 Июн 2013 22:12:22
>>50163512
Может тебе мой готовый хороший список дать? Переделаешь там под себя.

Срд 19 Июн 2013 22:15:32
>>50163795
Да у меня у самого есть готовые, говорюже, я обречен работать по заданным прототипам. Моя бы воля, яб переписал всё без typedef, да вообще всё переписал бы лол. Например ф-я переводящая указатель в конец списка называется EndList, или я тупой и плохо знаю ингриш, или правда стоило написать ListEnd

Срд 19 Июн 2013 22:16:03
>>50163795
В любом случае спасибо!

Срд 19 Июн 2013 22:18:28
>>50164094
Держи может поможет. А у тебя тут оче сильно говнокод какой-то.

#ifndef _LIST_H_
#define _LIST_H_

#include "stdafx.h"
#include "Shape.h"


class List
{
private:
struct ListElem
{
Shape* data;
ListElem *next;
};
ListElem *buf; //буфер
ListElem *cur; //указатель на текущий элемент
public:
struct exEndOfList {};
public:
List() //конструктор по умолчанию
{
buf=new ListElem;
buf->next=buf;
cur=buf;
}
~List() //деструктор
{
MakeEmpty();
delete buf;
}
List(const List &amp;A) //конструктор копирования
{
buf=new ListElem;
buf->next=buf;
ListElem *ptr=A.buf->next;
cur=buf;
ListElem *q=0;
while (ptr!=A.buf)
{
AddElem(ptr->data);
if (ptr==A.cur)
q=cur;
ptr=ptr->next;
}
cur=q;
}
List* clone()
{
return new List(*this);
};
List&amp; operator=(const List &amp;A) //оператор присваивания
{
if (this==&amp;A) return *this;
MakeEmpty();
ListElem *ptr=A.buf->next;
ListElem *q=0;
while (ptr!=A.buf)
{
AddElem(ptr->data);
if (ptr==A.cur)
q=cur;
ptr=ptr->next;
}
cur=q;
return *this;
}
void Show(HDC hdc)
{
ListElem *ptr=buf->next;
while (ptr!=buf)
{
ptr->data->Draw(hdc);
ptr=ptr->next;
}
}
void AddElem(Shape* C) //добавление элемента
{
ListElem *p=new ListElem;
p->next=cur->next;
Shape* cp=C->copy();
p->data=cp;
cur->next=p;
cur=cur->next;
}
void DelElem() //удаление элемента
{
if (IsEnd()) throw exEndOfList();
ListElem *p=cur->next;
cur->next=p->next;
delete p->data;
delete p;
}
void MakeEmpty() //очистка списка
{
ListElem *p=buf->next;
while (p!=buf)
{
ListElem *q=p;
p=p->next;
delete q->data;
delete q;
}
buf->next=buf;
cur=buf;
}
bool IsEmpty() //проверка на пустоту
{
return buf->next==buf;
}
void ToBegin() //в начало списка
{
cur=buf;
}
void ToNext() //переход к сл. элементу
{
cur=cur->next;
}
bool IsEnd() const //проверка на конец
{
return cur->next==buf;
}
};


#endif

Срд 19 Июн 2013 22:36:43

#include <stdlib.h>

const ListOk= 0;
const ListNotMem= 1;
const ListEnd= 3;
typedef long long BaseType;
typedef struct element *ptrel;
typedef struct
{
BaseType data;
ptrel next;
}element;
typedef struct
{
ptrel Start;
ptrel ptr;
unsigned int N;
}List;
short ListError;
void InitList(List *L)
{
L->Start= (ptrel) malloc(sizeof(element));//фиктивный элемент
L->ptr= L->Start;
L->N= 0;
L->Start->next= NULL;
}


Сократил листинг для наглядности

Срд 19 Июн 2013 22:46:54
Ладно, ребята. Я уже сделал вдоль. Пpощайте!

Срд 19 Июн 2013 22:49:04
ты element неверно объявил.

надо
typedef struct element
{
...
} element

Срд 19 Июн 2013 22:53:10
Держи, бро:
8c8
< typedef element
---
> typedef struct element

Срд 19 Июн 2013 23:23:34
Гонконгач торт
>>50166257
Добра тебе, но я уже вспомнил. Вот спешил поделиться с вами. Это вроде где-то в K&amp;R прописано было, да? Как бороться с эдакой рекурсией


← К списку тредов