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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оператор NEW, Массивы объектов 
:(
    Опции темы
Molnienosetz
  Дата 6.3.2003, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



У меня опять проблемы (у меня всегда проблемы).
Я сделал, как посоветовали вчера:

Есть конструктор matrix(unsigned, unsigned);
Я хочу выделить память под массив:

matrix *m_arr = new matrix(4, 4) [10]; // Массив из десяти матриц

В ответ компилятор говорит мне, что, мол у меня не перегружен оператор matrix::new(unsigned, unsigned, ...). Что делать? (Я точно не записал что он говорит - забыл - а до дома - полчаса ходу.)
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
Guest
Дата 6.3.2003, 20:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











так тебе надо массив указателей...
matrix *m [10];
for (int i=0; i<10; i++)
m[i] = new matrix (4,4);
  Вверх
Molnienosetz
Дата 6.3.2003, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Не, в том смысле, что указатель один, указывает на массив объектов
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
Nastya
Дата 7.3.2003, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Цитата
matrix *m_arr = new matrix(4, 4) [10];

Так делать нельзя. Тут можно вызвать только конструктор по умолчанию. (на сколько я в курсе)

А вот так как посоветовал Гость. В полне реально


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Fantasist
Дата 7.3.2003, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Цитата
Так делать нельзя. Тут можно вызвать только конструктор по умолчанию


Однозначно. Нет, делать-то так, конечно, можно, если перегрузить operator new. smile.gif


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Я опять всё нагнал и всех напарил. Пишет мне не компилятор, а компоновщик.
Следующее:

linker error: undefined symbol _matrix_new_(void far*, unsigned int, unsigned long, unsigned int, ...)

Но вы, очевидно, правы. Не стоит напрягаться зря.
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
knave
Дата 7.3.2003, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: 1
Всего: 5



Цитата(Guest @ 6.3.2003, 12:34)
так тебе надо массив указателей...
matrix *m [10];
for (int i=0; i<10; i++)
m[i] = new matrix (4,4);

Используя то что тебе написали ты какраз и сможеш обращаться к массиву из матриц 4 на 4 (Я так понял тебе это и надо)


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
Molnienosetz
Дата 7.3.2003, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Просто мне хотелось иметь ОДИН указатель. Но всё равно спасибо.
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
Step
Дата 7.3.2003, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Просто мне хотелось иметь ОДИН указатель. Но всё равно спасибо.
у тебя в любом случае будет масив указателей.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Molnienosetz
Дата 10.3.2003, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Понятно... Вообще-то мне теперь хочется узнать, как выглядит этот конструктор по умолчанию и чем он отличается от моего.
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
neutrino
Дата 10.3.2003, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 1
Всего: 62



Цитата(Molnienosetz @ 10.3.2003, 21:57)
Понятно... Вообще-то мне теперь хочется узнать, как выглядит этот конструктор по умолчанию и чем он отличается от моего.

Po umolchaniju budet pustoi' konstruktor:
Matrix();

No ty mojesh sdelat' i takoi':
Matrix(int, int);


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Molnienosetz
Дата 10.3.2003, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



А почему, когда я писал свой пустой конструктор, линкер мне тоже ошибку выводил?
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
neutrino
Дата 10.3.2003, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 1
Всего: 62



Prosto napishi:

matrix M1(4, 4)

A chto za problemy s pustym konstruktorom? Kod privedi.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Molnienosetz
Дата 11.3.2003, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Когда у меня в классе был конструктор

matrix();

или

matrix(void); ,

всё равно на

matrix *matarr = new matrix [число];

линкер писал

Цитата
linker error: undefined symbol _matrix_new_(void far*, unsigned int, unsigned long, unsigned int, ...)


А когда я все конструкторы удалял, никакой ошибки не было.

--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
Molnienosetz
Дата 15.3.2003, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 6.3.2003
Где: Россия, Королёв, комитетский лес

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



Цитата
у тебя в любом случае будет масив указателей.

ПОЧЕМУ!!! dontgetit.gif
Я всегда думал, что массив объектов через указатель изготовляется так:
делаем указатель типа "указатель на объект_1", он занимает какие-нибудь 4 байта и показывает на этого объекта. Запрашиваем память под кучку объектов, стоящих вплотную. Кусок будет таких размеров:
{размер(объект_1) * число объектов}, и передаём адрес этого куска указателю. Обращение к объекту будет таким:
(указатель + номер_объекта_начиная_с_нуля) -> элемент_объекта. Правильно?

А вот если массив указателей, то:

имя_массива[номер_объекта_начиная_с_нуля] -> элемент_объекта.
Так будет прожрана огромная кучка памяти, чуть ли не (4 байта * число_объектов)

Кстати, я "объект" правильно пишу? Может, надо "обьект"? dontgetit.gif

Это сообщение отредактировал(а) Molnienosetz - 15.3.2003, 00:09
--------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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