Привет, у меня есть две проблемы:
cannot convert from 'std::vector<_Ty>' to 'std::vector<_Ty> &
void CMapObjectPropertyPageAmbience::OnUpdateUI(CProperty* pProperty)
{
prt::PropertyAmbienceStringToData(pProperty, &m_propertyAmbience);
std::vector<CFilename>& rSoundFileNameVector = m_propertyAmbience.AmbienceSoundVector;
for (DWORD dwIndex = 0; dwIndex < rSoundFileNameVector.size(); ++dwIndex)
{
m_ctrlSoundFileList.InsertString(dwIndex, rSoundFileNameVector[dwIndex].c_str());
}
m_ctrlPlayType.SelectString(-1, m_propertyAmbience.strPlayType.c_str());
SetDialogFloatText(GetSafeHwnd(), IDC_MAP_OBJECT_PROPERTY_AMBIENCE_INTERVAL, m_propertyAmbience.fPlayInterval);
SetDialogFloatText(GetSafeHwnd(), IDC_MAP_OBJECT_PROPERTY_AMBIENCE_INTERVAL_VARIATION, m_propertyAmbience.fPlayIntervalVariation);
SetDialogFloatText(GetSafeHwnd(), IDC_MAP_OBJECT_PROPERTY_AMBIENCE_MAX_VOLUME_AREA_PERCENTAGE, m_propertyAmbience.fMaxVolumeAreaPercentage * 100.0f);
OnUpdatePropertyData(m_propertyAmbience.strName.c_str());
OnChangePlayType();
}
Ошибка появляется:
std::vector<CFilename>& rSoundFileNameVector = m_propertyAmbience.AmbienceSoundVector;
Ни одна из двух перегрузок не могла преобразовать все типы аргументов:
void CMapObjectPropertyPageAmbience::OnDeleteSoundFile()
{
DWORD dwCurSel = DWORD(m_ctrlSoundFileList.GetCurSel());
if (dwCurSel >= m_propertyAmbience.AmbienceSoundVector.size())
return;
DeleteVectorItem < CFilename > ( & m_propertyAmbience.AmbienceSoundVector, dwCurSel);
m_ctrlSoundFileList.DeleteString(dwCurSel);
}
на DeleteVectorItem<CFilename>(&m_propertyAmbience.AmbienceSoundVector, dwCurSel);
Полные ошибки
1>Dialog\MapObjectPropertyPageAmbience.cpp(78): error C2440: 'initializing' : cannot convert from 'std::vector<_Ty>' to 'std::vector<_Ty> &'
1> with
1> [
1> _Ty=std::string
1> ]
1> and
1> [
1> _Ty=CFilename
1> ]
1>Dialog\MapObjectPropertyPageAmbience.cpp(205): error C2665: 'DeleteVectorItem' : none of the 2 overloads could convert all the argument types
1> d:\dev\kraizy\novaline\srcs\client\eterpack\../eterBase/Stl.h(146): could be 'void DeleteVectorItem<CFilename>(std::vector<_Ty> *,unsigned long)'
1> with
1> [
1> _Ty=CFilename
1> ]
1> d:\dev\kraizy\novaline\srcs\client\eterpack\../eterBase/Stl.h(191): or 'void DeleteVectorItem<CFilename>(std::vector<_Ty> *,T)'
1> with
1> [
1> _Ty=CFilename,
1> T=CFilename
1> ]
1> while trying to match the argument list '(std::vector<_Ty> *, DWORD)'
1> with
1> [
1> _Ty=std::string
1> ]
Вы пытаетесь использовать vector<string>
в местах, где ожидается vector<CFilename>
. Это совершенно несвязанные типы.
m_propertyAmbience.AmbienceSoundVector
? Показать точный и полный текст сообщения об ошибке - он скажет вам, какие типы компилятор считает_Ty
, и какие функции компилятор учитывал и отклонял при поиске подходящей перегрузки._Ty
. Посмотрите на окно вывода.