как можно инициализировать вектор <CFont>? - PullRequest
0 голосов
/ 26 апреля 2019

Создание такого шрифта работает нормально.Я получаю текст на экране без проблем:

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>        ]

У меня остается мысль сделать массив указателей на четыре индивидуально объявленных и инициализированных члена.Я уверен, что это будет работать, но это явно не идеально.Есть еще идеи?

...