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

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

Войти
Регистрация
Восстановить пароль
 
 
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
#1

Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд - C++

05.02.2012, 04:46. Просмотров 1030. Ответов 23
Метки нет (Все метки)

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
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <vector>
#include <cstdlib>
#include <set>
 
using namespace std;
 
#define F_SIZE 30
#define DICE 6
 
 
class field{
private:
    vector<int*> rms;
    int *something(){
        return new int(DICE);
    }
public:
    field(bool autogen){
        if(autogen){
            int n = 5;
            while(n--){
                rms.push_back(something());
            }
        }else{
            cout << "Have not writed yet;\n";
            //herein we have to write something...
        }cout << rms.size();
        cout << " | end of field's constructor.\n";
    }field(){
        field(true);
    }void show(){
        cout << rms.size() << ":\n";
        for(vector<int*>::iterator i = rms.begin(); i != rms.end(); i++){
            cout << "(" << (**i) << "; " << (**i) << ")";
            cout << " |=| ";
            cout << "(" << (**i) << ";" << (**i) << ")";
            cout << endl;
        }
    }
};
 
int main(){
    field fl;
    fl.show(); //WTF!?. Why vector erased after constructor?..
    return 0;
}
Вывод:
Код
5 | end of field's constructor.
0:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2012, 04:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заюзанный вектор в конструкторе взрывается, самоуничтожается, очищается, отправляется в адд (C++):

Добавление в вектор объекта класса в конструкторе - C++
Почему у меня не получается сделать вот так? vector &lt;C&gt; Vec; class C { public:

Мозг взрывается - C++
Помогите пожалуйста, не могу понять почему консольное окно закрывается, пробовала всё что только можно :fgetc(stdin);system (&quot;pause &gt;&gt;...

STM32 и DS1621 измерение температуры. Взрывается моск! - ARM
Здравствуйте, Уважаемые участники форума! Прошу у Вас помощи!!! Взрывается моск!!! Нужна консультация человека, который знает как свои 5...

Постоянно падает скорость интернета, и пинг "взрывается" - Удаление вирусов
Всем привет, компьютерные гении!:) И так, к делу. Очень прошу помочь или хотя бы разобратся кто виноват. У меня интернет провайдер...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Очищается DBGrid - Delphi БД
Делаю по кнопке сложение чисел в колонке Summa базы данных Test. Само сложение работает нормально, но после нажатия на кнопку все данные...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.02.2012, 08:18 #2
C++
1
field(true);
замените на
C++
1
*this = field(true);
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2012, 08:23 #3
AnyOne697, а лучше просто вынесите инициализацию в отдельный закрытый сервисный метод и вызывайте его из каждого конструктора, пока нет релизного компилятора с делегированием конструкторов.
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
05.02.2012, 08:59  [ТС] #4
А в чём, собственно проблема??? Нельзя использовать конструктор внутри метода класса? Кажется понял тонкость сию =) Спасибо!
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2012, 09:02 #5
AnyOne697, там, где вы "вызвали конструктор", вы на самом деле создали временный объект, который ушел в небытие сразу после создания. Так один конструктор из другого вызывать нельзя. В новом стандарте появилось делегирование конструкторов, но у него другой синтаксис, и пока ещё ни один релизный компилятор его не поддерживает (вроде в gcc 4.7.0 оно есть, но он ещё не релизный).
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
05.02.2012, 09:35  [ТС] #6
Спасибо! Теперь я знаю всё и могу продолжать занимать фигнёй! Да прибудет со мной сила и напишу я что-то_никому_ненужное!

Кстати, вот такой вот вопрос не по теме: есть ли кроссплатформенная прослойка между библиотекой и ОС (компилятором). Qt не работает =(
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.02.2012, 10:52 #7
C++
1
field(bool autogen = true) {...}
А конструктор без параметров убрать
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
05.02.2012, 11:09  [ТС] #8
Цитата Сообщение от Nameless One Посмотреть сообщение
field(bool autogen = true) {...}
cut Я же думал об этом... Ночью... Но забыл =(
Thanks.

Добавлено через 10 минут
Oh no!.. Failed!..
Для этого придётся вызывать:
field fl();
Что ессено бред =(
 Комментарий модератора 
Ещё один мат и карточка ваша!
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
05.02.2012, 11:11 #9
Цитата Сообщение от AnyOne697 Посмотреть сообщение
field fl();
Нет, правильно:
C++
1
field fl;
Вообще field fl(); это прототип функции, т.е. это не есть создание объекта.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2012, 11:11 #10
AnyOne697, ничего подобного. Так код не скомпилируется, потому что эта строка объявляет прототип функции без параметров, возвращающей объект типа field.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.02.2012, 11:12 #11
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Для этого придётся вызывать:
field fl();
Что ессено бред =(
что-что?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class foo
{
public:
    foo(int i = 3)
    {
    std::cout << i << std::endl;
    }
};
 
int main()
{
    foo f1(0);
    foo f2;
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
05.02.2012, 11:14 #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так код не скомпилируется,
Почему?
Прототип функции нельзя писать в функции?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2012, 11:16 #13
Chelioss, нет-нет)) просто привычка. Редко объявляешь объект, который потом не используешь. Код не скомпилируется при попытке использования объекта fl, который для компилятора будет именем функции.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.02.2012, 11:16 #14
Цитата Сообщение от Chelioss Посмотреть сообщение
Прототип функции нельзя писать в функции?
можно
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
05.02.2012, 11:23  [ТС] #15
Я сразу сказал - бред всё это =(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2012, 11:23
Привет! Вот еще темы с ответами:

Не очищается массив - PHP
делаю пример из книги и не понимаю почему не очищается корзина! Помогите разобраться в чем дело Вот код контроллера &lt;?php...

Не очищается экран - C++
Здравствуйте, друзья. Подскажите, пожалуйста, чем очистить экран (очевидно, что system(&quot;cls&quot;) в данном случае не функционирует): ...

не очищается listbox - C++ Builder
void __fastcall TForm1::Button2Click(TObject *Sender) { ListBox1-&gt;Clear(); //пробовал так ListBox1-&gt;Items-&gt;Clear(); ...

Не очищается буфер - C++ WinAPI
Всем привет. Есть такой код: TCHAR* buf; void f(int index)//допустим есть такая функция { //заносим в буфер информацию с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.02.2012, 11:23
Ответ Создать тему
Опции темы

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