Форум программистов, компьютерный форум CyberForum.ru

Проблемы со списком, в чем ошибка? - C++

Восстановить пароль Регистрация
 
MastAKK
 Аватар для MastAKK
143 / 134 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
04.04.2013, 16:46     Проблемы со списком, в чем ошибка? #1
Итак, изучал я, значит, C style lists (не знаю, как будет по-русски) и столкнулся с такой проблемой: надо его заполнить. Вроде все просто, написал следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef ST_H
#define ST_H
 
//st.h
 
template <typename T>
class st{
public:
    st(T n);
    T a;
    st<T>* next;
};
 
template <typename T>
st<T>::st(T n){//конструктор
    a = n;
}
 
#endif // ST_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//main.cpp
#include <iostream>
 
#include "include\st.h"
 
using namespace std;
 
void enter(st<int>* h){ //ввод
    int i;
    cin >> i;
    h = new st<int>(i); //указываем голове значение i
    st<int>* c = h; //создаем собственно сам "бегающий" указатель на элемент списка, с которым работаем
    cin >> i;
    while(i != 0){ //0 - конец ввода
        c = new st<int>(i); //добавляем в список новое значение
        c = c->next; //перескакиваем на следующий элемент
        cin >> i; //ещё раз вводим i
    }
    cout << h->next->a;//дебаговый вывод, тут-то он и выводит непонятные числа
}
 
int main(){
    st<int>* h; //указатель на голову
    enter(h); //вызываем ввод
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.04.2013, 17:39     Проблемы со списком, в чем ошибка? #2
Цитата Сообщение от MastAKK Посмотреть сообщение
template <typename T>
class st{
public:
* * st(T n);
* * T a;
* * st<T>* next;
};
template <typename T>
st<T>::st(T n){//конструктор
* * a = n;
}
Это ни разу не С-style lists.

C-Style list односвязный это как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
struct Node {
    void *data;
    Node *next;
};
 
void insertAfter(
    struct Node *node,
    struct Node *newNode ) {
    newNode->next = node->next;
    node->next = newNode;
}
MastAKK
 Аватар для MastAKK
143 / 134 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
04.04.2013, 17:45  [ТС]     Проблемы со списком, в чем ошибка? #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Это ни разу не С-style lists.

C-Style list односвязный это как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
struct Node {
    void *data;
    Node *next;
};
 
void insertAfter(
    struct Node *node,
    struct Node *newNode ) {
    newNode->next = node->next;
    node->next = newNode;
}
ладно, не в этом дело, не подскажете, в чем у меня в коде проблема?
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.04.2013, 18:44     Проблемы со списком, в чем ошибка? #4
Цитата Сообщение от MastAKK Посмотреть сообщение
в чем у меня в коде проблема?
Он не составляет связный список. Вынесите составление связного списка в отдельную функцию и все поймете.
Yandex
Объявления
04.04.2013, 18:44     Проблемы со списком, в чем ошибка?
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru