| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CBitmap в CArray |
| Автор: jackevsen 25.2.2009, 21:29 | ||||||
| Хочу сделать массив картинок. Вначале .срр файла добавляю : #include "afxtempl.h" Потом...
При компиляции выдает следующее: Microsoft Visual Studio 9.0\VC\atlmfc\include\afxwin.h(312) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' Делал так:
При компиляции выдает следующее: Microsoft Visual Studio 9.0\VC\atlmfc\include\afxwin.h(312) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject' Когда делал массив не битмапов а int : typedef CArray<int,int> MYArray; То все компилируется нормально. Делал пример из MSDN :
Тогда тоже все нормально компилируется..... Почему с битмапами не хочет работать....? |
| Автор: Earnest 25.2.2009, 21:41 |
| Патаму чта CObject не хочет и не умеет копироваться. Запрещено ему. И поделом - что ты будешь делать с копиями хандлов? Складывай в массив указатели (не помню как там точно, но есть в MFC типизированный массив указателей). Но следить за удалением придется самому. Второй вариан - если максимальное число элементнов известно и невелико, заведи статический массив (в смысле C-массив); наличие в нем объекта можно опреджелять по хандлу. И наконец, я бы использовада нормальную std коллекцию вместо убогой MFC-шной, а внутри держала бы умные указатели с подсчетом ссылок (что-нибудь из boost или самописное). Добавлено через 3 минуты и 21 секунду Еще один вариант - коллекция HBITMAP, но тогда сам отвечаешь за их размножение и уничтожение. |
| Автор: jackevsen 8.3.2009, 15:20 | ||
| Просто в описании CArray написано, что можно делать массив на основе любого класса (по крайней мере мне так показалось).Вот я и удивился, что с CBitmap не хочет работать.Ну да ладно... Вообще, мне нужен массив,который может изменять свой размер в ходе выполнения программы.В интернете прочитал что есть такая вещь как std::vector.Но, вроде пишут, что изменяться этот вектор может только в большую сторону...может они и не правы. В одной книге по С++ нашел пример, в котором изменяется размер динамического массива. В общем, в своей программе написал так:
imageArray - это ссылка на динамический массив. arrayCount - это int переменная, в которую записывается текущее количество элементов в массиве imageArray; Вроде, работает....Правда я не пробовал изменять размер массива в меньшую сторону. Хотелось бы узнать мнение, насколько это хороший вариант? |