Создание такого шрифта работает нормально.Я получаю текст на экране без проблем:
CFont font;
font.CreatePointFont( 90, (LPCTSTR) "Arial", NULL );
pDC->SelectObject( &font );
pDC->DrawText( pszName, -1, &rect, 0 );
Однако я хочу вектор из них.
Объявление хранения в векторе работает нормально:
vector<CFont> afontLabel;
Однако я попытался изменить размеры до четырех элементов (чей конструктор CFont () будет вызываться, верно?), А затем инициализировать их с помощью CreatePointFont () как обычно.Однако, когда есть строка с resize ():
afontLabel.resize(4);
afontLabel[0].CreatePointFont( 90, (LPCTSTR) "Arial", NULL );
Я получаю эту ошибку:
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory0(920): error C2280: 'CFont::CFont(const CFont &)': attempting to reference a deleted function
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\atlmfc\include\afxwin.h(446): note: compiler has generated 'CFont::CFont' here
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory(163): note: see reference to function template instantiation 'void std::_Default_allocator_traits<_Alloc>::construct<_Ty,_Ty>(_Alloc &,_Objty *const ,_Ty &&)' being compiled
1> with
1> [
1> _Alloc=std::allocator<CFont>,
1> _Ty=CFont,
1> _Objty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory(164): note: see reference to function template instantiation 'void std::_Default_allocator_traits<_Alloc>::construct<_Ty,_Ty>(_Alloc &,_Objty *const ,_Ty &&)' being compiled
1> with
1> [
1> _Alloc=std::allocator<CFont>,
1> _Ty=CFont,
1> _Objty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory(231): note: see reference to function template instantiation 'void std::_Uninitialized_backout_al<_FwdIt,_Alloc>::_Emplace_back<CFont>(CFont &&)' being compiled
1> with
1> [
1> _FwdIt=CFont *,
1> _Alloc=std::allocator<CFont>
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory(231): note: see reference to function template instantiation 'void std::_Uninitialized_backout_al<_FwdIt,_Alloc>::_Emplace_back<CFont>(CFont &&)' being compiled
1> with
1> [
1> _FwdIt=CFont *,
1> _Alloc=std::allocator<CFont>
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory(259): note: see reference to function template instantiation '_FwdIt std::_Uninitialized_move_al_unchecked<_Iter,_Iter,_Alloc>(_InIt,const _InIt,const _FwdIt,_Alloc &,std::_General_ptr_iterator_tag,std::_Any_tag)' being compiled
1> with
1> [
1> _FwdIt=CFont *,
1> _Iter=CFont *,
1> _Alloc=std::allocator<CFont>,
1> _InIt=CFont *
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(1932): note: see reference to function template instantiation '_FwdIt *std::_Uninitialized_move<CFont*,CFont*,std::allocator<_Ty>>(const _InIt,const _InIt,_FwdIt,_Alloc &)' being compiled
1> with
1> [
1> _FwdIt=CFont *,
1> _Ty=CFont,
1> _InIt=CFont *,
1> _Alloc=std::allocator<CFont>
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(1931): note: while compiling class template member function 'void std::vector<CFont,std::allocator<_Ty>>::_Umove_if_noexcept1(CFont *,CFont *,CFont *,std::true_type)'
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(1942): note: see reference to function template instantiation 'void std::vector<CFont,std::allocator<_Ty>>::_Umove_if_noexcept1(CFont *,CFont *,CFont *,std::true_type)' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\local\foo\bar.h(131): note: see reference to class template instantiation 'std::vector<CFont,std::allocator<_Ty>>' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
Я также попытался выдвинуть шрифты в конец массива, скод, такой как:
CFont font;
font.CreatePointFont( 90, (LPCTSTR) "Arial", NULL );
afontLabel.push_back( font );
Это, в свою очередь, приводит к следующей ошибке:
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xmemory0(920): error C2280: 'CFont::CFont(const CFont &)': attempting to reference a deleted function
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\atlmfc\include\afxwin.h(446): note: compiler has generated 'CFont::CFont' here
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(949): note: see reference to function template instantiation 'void std::_Default_allocator_traits<_Alloc>::construct<_Ty,const _Ty&>(_Alloc &,_Objty *const ,const _Ty &)' being compiled
1> with
1> [
1> _Alloc=std::allocator<CFont>,
1> _Ty=CFont,
1> _Objty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(951): note: see reference to function template instantiation 'void std::_Default_allocator_traits<_Alloc>::construct<_Ty,const _Ty&>(_Alloc &,_Objty *const ,const _Ty &)' being compiled
1> with
1> [
1> _Alloc=std::allocator<CFont>,
1> _Ty=CFont,
1> _Objty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(965): note: see reference to function template instantiation 'void std::vector<CFont,std::allocator<_Ty>>::_Emplace_back_with_unused_capacity<const _Ty&>(const _Ty &)' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(981): note: see reference to function template instantiation 'void std::vector<CFont,std::allocator<_Ty>>::emplace_back<const _Ty&>(const _Ty &)' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\program files\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\vector(980): note: while compiling class template member function 'void std::vector<CFont,std::allocator<_Ty>>::push_back(const _Ty &)'
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\local\foo\bar.cpp(377): note: see reference to function template instantiation 'void std::vector<CFont,std::allocator<_Ty>>::push_back(const _Ty &)' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
1>c:\local\foo\bar.h(131): note: see reference to class template instantiation 'std::vector<CFont,std::allocator<_Ty>>' being compiled
1> with
1> [
1> _Ty=CFont
1> ]
У меня остается мысль сделать массив указателей на четыре индивидуально объявленных и инициализированных члена.Я уверен, что это будет работать, но это явно не идеально.Есть еще идеи?