//Class ParmContainer has a constructor that takes 3 CString argments with the third argument optional
class ParmContainer
{
public:
ParmContainer(CString label, CString type, CString format = CString("") );
}
//Here is the constructor
ParmContainer::ParmContainer(CString label, CString type, CString format)
{
Create(label, type, format);
}
//Class AddParms has a variable m_Parms declared as a template for a CList object passing in the class ParmContainer as the type
class AddParms
{
...
public:
CList<ParmContainer,ParmContainer&> m_Parms;
}
//Function Create() calls m_Parms.AddHead(ParmContainer(name, type)); which produces errors
bool AddParms::Create(CString name, CString type)
{
...
m_Parms.AddHead(ParmContainer(name, type));
return (true);
}
This code compiled OK on .NET 2003. I am using Visual Studio Community 2022 and .NET 4.8 and all the following errors are produced:
AddParms.cpp(50,9): error C2665: 'CList<ParmContainer,ParmContainer &>::AddHead': no overloaded function could convert all the argument types
\MSVC\14.37.32822\atlmfc\include\afxtempl.h(727,7): message : could be 'void CList<ParmContainer,ParmContainer &>::AddHead(CList<ParmContainer,ParmContainer &> *)'
AddParms.cpp(50,9): message : 'void CList<ParmContainer,ParmContainer &>::AddHead(CList<ParmContainer,ParmContainer &> *)': cannot convert argument 1 from 'ParmContainer' to 'CList<ParmContainer,ParmContainer &> *'
AddParms.cpp(50,31): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
\MSVC\14.37.32822\atlmfc\include\afxtempl.h(723,11): message : or 'POSITION CList<ParmContainer,ParmContainer &>::AddHead(ARG_TYPE)'
1> with
1> [
1> ARG_TYPE=ParmContainer &
1> ]
AddParms.cpp(50,9): message : 'POSITION CList<ParmContainer,ParmContainer &>::AddHead(ARG_TYPE)': cannot convert argument 1 from 'ParmContainer' to 'ARG_TYPE'
1> with
1> [
1> ARG_TYPE=ParmContainer &
1> ]