Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск ошибки 
:(
    Опции темы
stat007
Дата 10.12.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Программа чёта выдаёт ошибку в строке *, подскажите почему:

Код

#include<iostream>
using namespace std; 
class myclass 
{
    int x;
public:
    myclass() { x = 0;}
    myclass(int n) { x = n; }
    int getx() { return x; }
    void setx(int n) { x = n; }
};
int main() 
{
    myclass *p; 
    myclass ob[10];
    p=new myclass[10];
    if(!p)
    {
        cout<<"Error mamory!"<<endl;
        return 1;
    }
    int i;
    for(i=0; i<10; i++)
        p[i]=ob;             //(*)
    for(i=0; i<10; i++)
    {
        cout<<"p["<<i<<"]: "<<p[i].getx();
        cout<<endl;
    }
    return 0; 
}

PM MAIL   Вверх
Fazil6
Дата 10.12.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



Цитата(stat007 @  10.12.2008,  18:54 Найти цитируемый пост)
подскажите почему

потому что p[i] это совсем не obи присваивать так нельзя
PM MAIL   Вверх
Acer
Дата 10.12.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



*тут я был не прав*

Это сообщение отредактировал(а) Acer - 10.12.2008, 19:12
PM MAIL   Вверх
Kallikanzarid
Дата 10.12.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



1) вместо p[i] = ob, очевидно, должно идти p[i] = ob[i]
2) По умолчанию в случае нехватки памяти new не возвращает NULL, а поднимает исключение std::bad_alloc. Поэтому либо лови исключение, либо используй p = new<nothrow> myclass[10] - эта версия new как раз возвращает NULL при неудаче.
3) В твоем классе нет оператора присваивания, аксессор не помечен как const, конструктор с одной переменной не помечен как explicit (хотя последнее - не всегда плохо). Также ты не используешь список инициализаторов. Все это делает твой код неэффективным (в теории, конечно, для таких игрушечных классов это не так важно).
4) Еще мелочь - в цикле лучше использовать ++i, а не i++. Для обычных переменных это абсолютно неважно, но лучше привыкай сразу, ибо итераторы STL подобное не прощают.

Добавлено через 1 минуту и 31 секунду
Acer, как бы тебе по-мягче сказать... Ты... эээ... хм... не прав. Да, вот! Ты не прав.
PM MAIL   Вверх
stat007
Дата 10.12.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



ок! спасибо!
а ещё такой вопрос: как инициализировать массив в данной программе, ну что бы выводилось 1 2 3 4 5 и т.д. ??
PM MAIL   Вверх
Kallikanzarid
Дата 10.12.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



p[i] = myclass( i )

или

p[i] = i; // если твой конструктор не помечен как explicit или ты определил оператор присваивания
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.