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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая память 
:(
    Опции темы
KIDD
Дата 20.5.2004, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не знаю, что я накосячил, но ща применил vector:
Цитата

///CDoc
#include < list>
#include < vector>
using namespace std;

vector <CMyPoint> array;

///View

CMyPoint point2;

pDoc->array.push_back(point2);
pDoc->array[0].point=point;



Выдает ошибку
Цитата

error C2558: class 'CMyPoint' : no copy constructor available or copy constructor is declared 'explicit'



Че ему не нравится; Класс (CMyPoint::CObject) наипростейший,урезал его полностью, оставив два пустых констр-деструктора и переменную CPoint point.
PM MAIL   Вверх
Sined
Дата 20.5.2004, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сорри, но тв пишешь
Цитата
pDoc->array[0].point=point;

В силу опять таки своей ограниченности я не вижу у тебя СMyPoint с именем point.
Cкорее всего, он Не принадлежит к классу CMyPoint и для не НЕ определен copy_constructor

может в CMyPoint надо вставить

CMyPoint& operator=(CPoint&);
с следущим синтаксисом
CMyPoint& СMyPoint::operator=(CPoint& p)
{
point=p;
return *this;
}



Это сообщение отредактировал(а) Sined - 20.5.2004, 16:59
PM MAIL   Вверх
DENNN
Дата 20.5.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



to mr.DUDA
Цитата
и необходимость "руками" прописывать присвоения всех по порядку полей одного объекта полям другого - просто бесила..

А зделать нечто вроде такого не судьба?


Код

CMyClass
{
public:
int a;
double b;
char szName[15];
//.. и т.д.
void CopyToAnother(CMyClass& target)
{
memcpy (&target,*this,sizeof(this);
}

PM ICQ   Вверх
Sined
Дата 20.5.2004, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если мне не изменяет память this все-таки указатель, т.е. 4 байтовое число.и sizeof(this) должно вернуть 4, хотя это личное мнение кролика.

PM MAIL   Вверх
KIDD
Дата 20.5.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Sined!


По фиг как писать -

Цитата

pDoc->array[0].point=point;//point - это переменная класса CMyPoint , а не объект!!!, a array[0] - первый объект (класса CMyPoint) в массиве.


либо
Цитата

point2.point=point;
pDoc->array.push_back(point2);

PM MAIL   Вверх
DENNN
Дата 20.5.2004, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
т.е. 4 байтовое число.и sizeof(this) должно вернуть 4,

Сорри, но можно написать и так:

Код
sizeof(CMyClass)

PM ICQ   Вверх
Sined
Дата 20.5.2004, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
По фиг как писать -


Цитата

pDoc->array[0].point=point;//point - это переменная класса CMyPoint , а не объект!!!, a array[0] - первый объект (класса CMyPoint) в массиве.

Это вопрос или утверждение?
Если утверждение, то тогда приводи весь текст, где написано, что point--переменна класса CMyPoint;
Если вопрос, то, видимо, не пофиг, если компилер ругается.

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


3D-маньяк
****


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

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



отвечаю KIDD'у и DENNN'у:
Цитата
Че ему не нравится; Класс (CMyPoint::CObject) наипростейший,урезал его полностью, оставив два пустых констр-деструктора и переменную CPoint point.

конструктор копирования необходим для классов, имеющих в своём составе поля, которые нельзя присвоить оператором "=". Компилятор сам сгенерирует конструктор копирования для класса CMyPoint, если все поля входящие в класс CMyPoint, можно присвоить оператором "=". Иначе (как и получилось у KIDD'а из-за переменной CPoint), требуется написать свой собственный конструктор копирования, в котором реализовать все сложные и не очень сложные процедуры присваивания полей одного объекта (p) другому (this)

Цитата
А зделать нечто вроде такого не судьба?

не судьба для сложных объектов (имеющих в составе указатели и ссылки)


--------------------
user posted image
PM MAIL WWW   Вверх
KIDD
Дата 20.5.2004, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ok,извиняюсь, я погорячился, Sined!

Цитата

class CMyPoint : public CObject
{
public:
CMyPoint();
virtual ~CMyPoint();
CPoint point;

};

/////////////
vector <CMyPoint> array;
/////////////////////

CMyPoint point2;

point2.point=point;//значение переменной point(которая справа) берется от координаты мыши(OnMouseLDown)
pDoc->array.push_back(point2);



Выдает ошибку
error C2558: class 'CMyPoint' : no copy constructor available or copy constructor is declared 'explicit'


Что неправильно????

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


Шустрый
*


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

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



Вроде бы mr.DUDA ответил, что для сложных классов(CPoint )может тоже входит. Надо явно определять к.конструктор. Хотя по стандарту вроде бы любой класс поддерживает побитовое копирование и твой пример должен сработать. Если нет, то может сработать следующий пример.
CMyPoint::CMyPoint()
:point()
{

}



CMyPoint& СMyPoint::operator=(CPoint& p)
{
point=p;
return *this;
}


т.е. разделить конструктор и присвоение.



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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