Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 10
1

Ошибка при выполнении метода PushBack

23.02.2015, 20:06. Показов 1089. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include "iostream"
#include "string.h"
#include <stdlib.h>
using namespace std;
 
template <typename T>
class MyVector
{
public:
    MyVector(){};
    void PushBack(const T &x);
    int Length(){ return length; }; 
    T* pointer(){ return ptr; };
    T& operator[](int i) { return pointer()[i]; };
private:
    static int length;
    T * ptr;
};
 
template <typename T>
int MyVector<T>::length = 0;
 
template <typename T >
void MyVector<T>::PushBack(const T &x)
{
    T * pointer = new T[length+1];
    for(int i=0;i<length;i++)
        pointer[i] = ptr[i];   
    ptr = pointer;
    ptr[length] = x;
    length++;  
     
}
 
class Vehicle
{
public:
    Vehicle(const char *name_);
    Vehicle(const char *name_ , const double &VehicleSpeed_ );
    Vehicle();
    virtual ~Vehicle(){};    
    virtual double GetSpeed()=0;
    double GetTotalTime(){ return Total_Time;}
    double GetTotalDistance(){ return Total_Distence; };
    const char * const GetName()const { return name; };
protected:
    double Total_Time;
    double Total_Distence;
private:
    char name[20];
    double VehicleSpeed;
};
 
Vehicle::Vehicle(const char *name_)
{
    strcpy(name, name_);  
    const double DefaultVehicleSpeed = -1;
    VehicleSpeed = DefaultVehicleSpeed; 
}
 
Vehicle::Vehicle(const char *name_ , const double &VehicleSpeed_ )
{
    strcpy(name, name_);    
    VehicleSpeed = VehicleSpeed_; 
}
 
Vehicle::Vehicle()
{
    const char DefaultVehicleName [] = "Default Vehicle";
    strcpy(name, DefaultVehicleName);
    const double DefaultVehicleSpeed = -1;
    VehicleSpeed = DefaultVehicleSpeed;
}
 
class Coach: public Vehicle
{
public:    
    Coach(const char *name_ ,const double &CoachSpeed_ );
    Coach();
    ~Coach(){};
    Coach(const char *name_);
    double GetSpeed(){ return CoachSpeed ; };
    char * GetName(){ return name; };
private:
    char name[20];
    double CoachSpeed;
};
 
Coach::Coach(const char *name_)
{
    strcpy(name, name_);  
    const double DefaultCoachSpeed = 10.;
    CoachSpeed = DefaultCoachSpeed; 
}
 
Coach::Coach(const char *name_ , const double &CoachSpeed_ )
{
    strcpy(name, name_);    
    CoachSpeed = CoachSpeed_; 
}
 
Coach::Coach()
{
    const char DefaultCoachName [] = "Default Coach";
    strcpy(name, DefaultCoachName);
    const double DefaultCoachSpeed = 10.;
    CoachSpeed = DefaultCoachSpeed;
}
 
class Automobile: public Vehicle
{
public: 
    Automobile(const char *name_ ,const double &CoachSpeed_ );
    Automobile();
    ~Automobile(){};
    Automobile(const char *name_);   
    double GetSpeed(){return AutomobileSpeed ; };
    char * GetName(){ return name; };
private:
    char name[20];
    double AutomobileSpeed;
};
 
Automobile::Automobile(const char *name_)
{
    strcpy(name, name_);  
    const double DefaultAutomobileSpeed = 100.;
    AutomobileSpeed = DefaultAutomobileSpeed; 
}
 
Automobile::Automobile(const char *name_ , const double &AutomobileSpeed_ )
{
    strcpy(name, name_);    
    AutomobileSpeed = AutomobileSpeed_; 
}
 
Automobile::Automobile()
{
    const char DefaultAutomobileName [] = "Default Automobile";
    strcpy(name, DefaultAutomobileName);
    const double DefaultAutomobileSpeed = 100.;
    AutomobileSpeed = DefaultAutomobileSpeed;
}
 
class Aeroplane: public Vehicle
{
public:
    Aeroplane(const char *name_ ,const double &CoachSpeed_ );
    Aeroplane();
    Aeroplane(const char *name_); 
    ~Aeroplane(){};
    double GetSpeed(){return AeroplaneSpeed ; };
    char * GetName(){ return name; };
private:
    double AeroplaneSpeed;
    char name[20];
};
 
Aeroplane::Aeroplane(const char *name_)
{
    strcpy(name, name_);  
    const double DefaultAeroplaneSpeed = 500.;
    AeroplaneSpeed = DefaultAeroplaneSpeed; 
}
 
Aeroplane::Aeroplane(const char *name_ , const double &AeroplaneSpeed_ )
{
    strcpy(name, name_);    
    AeroplaneSpeed = AeroplaneSpeed_; 
}
 
Aeroplane::Aeroplane()
{
    const char DefaultAeroplaneName [] = "Default Aeroplane";
    strcpy(name, DefaultAeroplaneName);
    const double DefaultAeroplaneSpeed = 500.;
    AeroplaneSpeed = DefaultAeroplaneSpeed;
}
 
int main()
{
    srand(0);
    MyVector<Coach> coaches; 
    MyVector<Automobile> automobiles;
    MyVector<Aeroplane> aeroplanes;
    coaches.PushBack (Coach ("Coach 1", 9.));
    coaches.PushBack (Coach ("Coach 2", 11.));
    coaches.PushBack (Coach ("Coach 3", 10.));
    coaches.PushBack (Coach ("Coach 4", 9.5));
    coaches.PushBack (Coach ("Coach 5"));
    automobiles.PushBack (Automobile ("Automobile 1"));
    automobiles.PushBack (Automobile ("Automobile 2", 90.));
    automobiles.PushBack (Automobile ("Automobile 3", 120.));
    automobiles.PushBack (Automobile ("Automobile 4", 150.));
    aeroplanes.PushBack (Aeroplane ("Aeroplane 1", 1030.));
    aeroplanes.PushBack (Aeroplane ("Aeroplane 2", 560.));
    aeroplanes.PushBack (Aeroplane ("Aeroplane 3", 2200.));
    MyVector<Vehicle *> coachPointers;
    MyVector<Vehicle *> automobilePointers;
    MyVector<Vehicle *> aeroplanePointers;
    for (int i = 0; i < coaches.Length(); ++i)
         coachPointers.PushBack (&coaches[i]);
    cout<<"Here!";
    for (int i = 0; i < aeroplanes.Length(); ++i)
         aeroplanePointers.PushBack (&aeroplanes[i]); 
    cout<<"Here!" //это еще выводит
    for (int i = 0; i < automobiles.Length(); ++i)
    {
     cout<<" i = "<<i; //тут выводит i=0 и программа начинает не отвечать.
     automobilePointers.PushBack (&automobiles[i]);
     }
    cin.get();
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2015, 20:06
Ответы с готовыми решениями:

Ошибка при повторном выполнении метода
Подскажите пожалуйста. Ошибка при повторном выполнении метода.

Ошибка при выполнении GetAsync-метода
Удаленный сервер возвратил ошибку: NotFound, Контракт службы имеет два метода, различие между...

Как сделать чтобы если при выполнении метода вылетала ошибка то выводился Алерт?
В метод подается число 10, находит в базе, затем возвращает значения и выводит true. Подается число...

Заполнение ProgressBar при выполнении метода
Здравствуйте! Возник такой вопрос. Существует два класса в одном распаковывается архив а в...

4
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
23.02.2015, 20:49 2
Лучший ответ Сообщение было отмечено vozvivan как решение

Решение

cout<<"Here!" //это еще выводит
Тут нет точки с запятой!

Добавлено через 4 минуты
При вызове
C++
1
2
3
4
5
6
void MyVector<T>::PushBack(const T &x)
{
    T * pointer = new T[length+1];
    for(int i=0;i<length;i++)
        pointer[i] = ptr[i];   //переменной  ptr ничего не присвоено
...
И не обзывайте, пожалуйста, ошибки времени исполнения ошибками компиляции!
1
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 10
23.02.2015, 21:41  [ТС] 3
да, извините, про точку с запятой просто забыл. А вот насчет того, что ничего не присваивается, я вообще хотел присвоить указателю pointer[i] указатель ptr[i] (он определен в классе MyVector). И я просто не понимаю, как так получается, что первые два цикла проходят, а третий нет.

Добавлено через 6 минут
То есть мне надо добавить для MyVector, что б там инициализировался ptr для первого MyVector<T>

Добавлено через 38 минут
если будет время, можете потом сказать, почему все-таки первые 2 цикла проходили, а 3ий нет?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
24.02.2015, 20:58 4
Цитата Сообщение от vozvivan Посмотреть сообщение
почему все-таки первые 2 цикла проходили, а 3ий нет?
Случайно получилось, что ptr соответствовал чему-то реальному.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 10
24.02.2015, 23:21  [ТС] 5
не знаю почему, но не помогло, я добавил в конструктор MyVector( T* ptr; ); и потом, до этого цикла прописал cout<<aeroplane.pointer(); и он выдал адрес этого указателя. На третий цикл все равно не хочет работать

Добавлено через 40 минут
понял, что ошибка в конструкторе, у всех ptr (для coachPointers, automobilePointers и aeroplanePointers) одинаковые адреса
0
24.02.2015, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2015, 23:21
Помогаю со студенческими работами здесь

FileNotFoundException и NullPointerException при выполнении метода
Я хочу проверить перевод на странице Я написал класс своей страницы и создал тестовый файл, в...

Лаги при выполнении метода в потоке
Из библиотеки VkNet поставил в поток юзать метод Users.Search и добавлять каждую строку в...

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

Отменить обновление страницы при выполнении метода
У меня есть кнопка &lt;form onSubmit={this.props.weatherMethod}&gt; &lt;input...

Что происходит при выполнении метода TableAdapter.Update()
Задача сохранять запись при переходи на следующую строку в DataGridView. Реализовывать решил в...

Не получается сохранить данные в БД при выполнении метода в другом потоке
ASP.NET Core 2.2 Web API Не получается сохранить данные в БД при выполнении метода в другом...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru