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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
#1

Ошибка, смысл которой не могу расшифровать - C++

19.11.2012, 03:17. Просмотров 554. Ответов 17
Метки нет (Все метки)

Первый раз в жизни делаю свой собственный класс (лабораторка по С++)
Задача создать направленный список и реализовать определенные функции
я пока не написал реализацию, а только пообъявлял все и создал cpp-шник где буду все реализовывать, а так же еще один cpp-шник с пустой (пока что) функцией main

вот код объявления класса (class_list.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
26
27
28
29
30
31
#include <fstream>
#include <string>
 
class List
{
    class Element
    {
        std::string data;            // что хранится
        Element* next;               // указатель на следующий элемент
        Element(std::string _data):  // inline конструктор
            data(_data),
            next(NULL)
            {}                            
        Element():                   // inline конструктор по умолчанию
            data(""),
            next(NULL)
            {}      
        ~Element() { delete this; }  // деструктор
    };
    Element* head;
    Element* current;
    Element* seek(std::string);
public:
    List(); 
    ~List();
    void push(std::string elem); //вставить elem в начало
    void push_back(std::string elem); //вставить elem в конец
    void push_after_first(std::string elem); //вставить elem после первого
    void push_after_each(std::string elem, std::string after); //вставить elem после каждого вхождения after
    std::ofstream* print(const char* filename); //записать в файл. вернуть указатель на файл
}
вот код реализации (тут пока ничего нет) list_realization.cpp

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
26
27
28
29
30
31
32
33
34
35
36
#include "class_list.h"
 
List::List()
{
 
}
 
List::~List()
{
 
}
 
void List::push(std::string elem)
{
 
}
 
void List::push_back(std::string elem)
{
 
}
 
void List::push_after_first(std::string elem)
{
 
}
 
void List::push_after_each(std::string elem, std::string after)
{
 
}
 
std::ofstream List::print(const char* filename)
{
 
}
ну и в main.cpp смотреть пока нечего, но вдруг что не так:

C++
1
2
3
4
5
6
7
8
#include "class_list.h"
#include <iostream>
using namespace std;
 
int main()
{
    
}
это список ошибок компиляции (их 2 шт.)

1>ClCompile:
1> main.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\iostream(10): error C2143: синтаксическая ошибка: отсутствие ";" перед "namespace"
1> list_realization.cpp
1>c:\documents and settings\владелец\рабочий стол\c++\v8\lab8\lab8\list_realization.cpp(4): error C2533: List::{ctor}: конструкторы не разрешены для возвращаемого типа

как я понял это:

1. вообще неясно какая ошибка может быть в файле от разработчиков
2. вообще неясно почему, ведь я все сделал правильно и у моего конструктора и деструктора нету возвращаемого типа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2012, 03:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка, смысл которой не могу расшифровать (C++):

Не могу понять смысл задания - C++
Определить тип заданных выражений и найти их значения. Составить систему тестов и вычислить полученное выражение для нескольких значений n...

Не могу понять смысл задания. - C++
День (утро, вечер, ночь - нужное подчеркнуть)) добрый! Взялся помочь человеку с контрольной по C и столкнулся с проблемой - не могу понять...

Не могу понять смысл данного задания, и написание его кода - C++
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные — в конец с сохранением порядка следования....

ошибка программы. расшифровать gdb и valgrind - C++
подскажите пожалуйста в чем мб трабла? /******************************gbd***************************/ Program received signal...

Необходимо расшифровать введеный файл(ошибка в вводе) - C++
не получается ввести переменную a:cin » a;- 11стр #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; ...

Не могу понять смысл "связные списки" - C++
Подскажите что значит односвязный, двусвязный, линейный списки,. каков их шаблон, и как работает?

17
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 03:20 #2
После объявление класса List поставьте ;
0
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
19.11.2012, 03:32  [ТС] #3
охренеть.. работает, спасибо !
есть ли какие-либо замечания по проектированию? правильно ли я сделал, что вложил Element в List?
0
Peregrin
33 / 33 / 1
Регистрация: 16.11.2012
Сообщений: 59
19.11.2012, 03:37 #4
Это частая ошибка - не ставить ; в конце .h
Лично я class Element вынес бы отдельно, т.е. классы должны быть каждый в отдельном файле. Но дело ваше, так вроде тоже приемлемо.
0
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 03:41 #5
Цитата Сообщение от bychevoz Посмотреть сообщение
C++
1
~Element() { delete this; } // деструктор
Зачем такое?
0
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
19.11.2012, 03:44  [ТС] #6
ну я смотрю с точки зрения что я работаю например на фирму
мне сказали создать список
я создаю список, и я не хочу чтоб пользователь пользовался типом Element. мне надо чтоб он пользовался списком, а список будет пользоваться Element'ами

Добавлено через 1 минуту
ну деструктор, как я понял, отвечает за то чтоб удалить объект
вот, когда наступает время смерти, он удаляет сам себя, это не логгично?
0
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 03:46 #7
Цитата Сообщение от bychevoz Посмотреть сообщение
вот, когда наступает время смерти, он удаляет сам себя, это не логгично?
У Вас в классе Element нет объектов, которые Вы выделяете в динамической памяти, так что оставьте деструктор пустым.
0
Peregrin
33 / 33 / 1
Регистрация: 16.11.2012
Сообщений: 59
19.11.2012, 03:47 #8
Подумал, что class Element в public, только сейчас заметил, что он private. Тогда все логично
0
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 03:48 #9
И еще, сделайте функции удаления элементов, поиска и сортировки.
0
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
19.11.2012, 03:52  [ТС] #10
поиск, сортировку и удаление в задании не требовали

я вот мучаюсь с деструктором List
что он должен делать? он должен удалить динамически созданные мною Element'ы
но по определению списка, я имею доступ только к одному Element'у в данный момент времени.
ночью голова совсем не думает, помогите, пожалуйста, с примерным алгоритмом для деструктора List
0
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 03:55 #11
но у Вас же есть указатель на следующий элемент списка. А у следующего на следующий(во сморозил) и т.д.
В деструкторе, проходите по всем элементам списка, и удаляете их.
0
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
19.11.2012, 04:03  [ТС] #12
то есть примерно так?
C++
1
2
3
4
5
6
7
Element* temp;
while (head)
{
temp=head->next;
delete head;
head=temp;
}
0
Croessmah
Эксперт CЭксперт С++
13512 / 7670 / 866
Регистрация: 27.09.2012
Сообщений: 18,870
Записей в блоге: 3
Завершенные тесты: 1
19.11.2012, 04:07 #13
Цитата Сообщение от bychevoz Посмотреть сообщение
примерно так?
Именно.
0
bychevoz
1 / 1 / 0
Регистрация: 16.11.2012
Сообщений: 27
19.11.2012, 05:40  [ТС] #14
вы не против, если когда я закончу, я выложу готовую работу на критику?

Добавлено через 1 час 31 минуту
всем спасибо, у меня все получилось, но по ходу дела возник вопрос:
вначале, я пытался реализовать print так:
C++
1
2
3
4
5
6
7
8
9
10
11
std::fstream* print(const char* filename)
{
    std::fstream f(filename, ios::out);
    Element* current=head;
    while (current)
    {
        f<<current->data<<'\n';
        current=current->next;
    }
    return &f;
}
а в самой функции main сделать так:
C++
1
L.print("d:\list.txt")->close;
но у меня не получилось, и на этой самой строчке из main() выдавало ошибку времени выполнения, и вылетало
при этом файл таки создавался, но чтото происходило внутри close()

я решил забить и открывать и закрывать файл внутри print, и сделать её void

но в чем же все таки ошибка была?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
19.11.2012, 05:49 #15
Цитата Сообщение от bychevoz Посмотреть сообщение
но в чем же все таки ошибка была?
C++
1
return &f;
Возвращаешь указатель на локальную переменную. Вообще для fstream вызывать close() совсем не обязательно, он "сам" это сделает (в деструкторе).
0
19.11.2012, 05:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2012, 05:49
Привет! Вот еще темы с ответами:

Есть ли смысл кодировать скрипт, или его очень просто расшифровать? - PHP
Есть ли смысл кодировать скрипт так или его очень просто расшифровать? &lt;?php...

Пытаюсь написать мини игрушку, смысл которой угадывать слова - C#
Добрый день. Правила игры. Дано несколько букв (8шт) Нажимая на эти буквы можно составить слово. После составления слова,...

Не могу расшифровать - Криптография
Ячи ё геъ ёхъэк х щъаыэчэър учиж ыэцэщтх, я яичициж, яая я тэмцхочшмтиж яцэмиочх, тэърфл геъи х миыпэсачр ичобыа, а тшёти геъи миыпэфёачр о...

Не могу расшифровать PHP - PHP
Помогите расшифровать template.php / Файл после раскадровки . Не хватает навыков. Хочу убрать рекламу из шаблона .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru