Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при определении класса  (Прочитано 7538 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ffldove
Гость
« : 16-05-2006 15:01 » 

подскажите что-то неправильно в class что именно как ввести с клавиатуры n если можно пишите на мыло ffldove@yandex.ru
Код: (C++)
#include <iostream.h>
class object
{  
int n;
double a[n];
double m[n][n];
public:
object (int);
~object();
void postr();
void vv();
void viv();
};
object::object(int l)
{
cin>>l;
n=new int l;
}
void vv()
{
for (int i=0;i<n;i++)
for (int o=0;o<n;o++)
cin>>l.m[i][o];
}
void postr()
{
int i,l;
i=0;
l=0;
for (i=0;i<n;i++)
{
if (m[i][i]<0) while (m[i][l]>0)
{
a[i]=m[i][l];
l++;
}
else
for (int j=i;j<n;j++)
if (m[i][j]>0) a[i]=m[i][j];
}
}
void main ()
{
object l;
l.vv();
l.postr();
l.viv();
}
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 16-05-2006 15:19 » 

ffldove,
Код:
int n;
double a[n];
double m[n][n];
Это ошибка не класса. При определении массивов,  длина массива должна указываться константой. Чтобы компилятор мог заранее выделить память. Хочеш изменять длину динамически. Делай динамические массивы. Через операторы new - delete.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 16-05-2006 15:44 » new

ffldove, Предупреждение: Читай правила форума. В частности запрешено спамить темы по всему форуму.
« Последнее редактирование: 17-05-2006 12:20 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
ffldove
Гость
« Ответ #3 : 17-05-2006 08:57 » 

вот мне и надо денамически подскажите как именно здесь это написать
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 17-05-2006 15:35 » 

ffldove,

int n;
double a[n];
double m[n][n];

эквивалентно делаем:
Код:
int n=10;
double* a=new double[n];
double* m=new double [n*n];
//...
//... работаем
//...
//удаляем
delete [] a; a=0;
delete [] m; m=0;

для удобства, доступ к массиву m делаем через макрос

#define def_m(xzb,yzb) m[yzb*n+xzb]

где xzb,yzb - индексы матрицы, начинающиеся с нуля
Записан

Sands
Помогающий

ua
Offline Offline

« Ответ #5 : 17-05-2006 20:21 » 

1) Возможно я не прав, но писать такое:
Код:
object::object(int l)

{

cin>>l;

n=new int l;

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

n = new int l;

Тоже будет выдана ошибка, ибо n  у нас типа int, а мы пытаемся на него выделить память да и l  в данном случае немного не в тему там стоит.

2) На строчку
 object l;
 в функции main() должно было ругнуться потому что, если мне не изменяет склероз, то при определении программистом хотябы одного своего конструктора, конструктор по умолчанию в классе не создается, а следовательно у нас будет только конструктор с одним параметром типа int и обьект класса сразу нада создавать, указывая в скобках параметр.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines