我有一堂课:
//header file
class CMDatabase
{
class Try;
typedef boost::shared_ptr<Try> TryPtr;
typedef boost::ptr_vector<Try> TryVector;
typedef TryVector::iterator TryVectorIterator;
class Try
{
public:
virtual ~Try();
virtual bool equal(CMDatabase::TryPtr mySd) = 0;
};
};
//.cpp file
class TryImpl : public CMDatabase::Try
{
bool equal(CMDatabase::TryPtr mySd)
{
//boost::shared_ptr<ServiceDataImpl> ServiceDataImplPtr;
//const ServiceDataImplPtr pOtherData = dynamic_cast<const ServiceDataImplPtr>(mySd);
//ServiceDataImpl *pOtherData = dynamic_cast<ServiceDataImpl *>(mySd.get());
return true;
}
};
//Another .cpp file
void UpdateClass::TryFind()
{
CMDatabase::TryVector defaultTry;
CMDatabase::TryVector updateTry;
//Code for filling two vectors here....
for(CMDatabase::TryVectorIterator i = defaultTry.begin(); i != defaultTry.end(); ++i)
{
CMDatabase::TryVectorIterator it = find_if(updateTry.begin(), updateTry.end(),bind1st(mem_fun(&CMDatabase::Try::equal), *i));
}
}
当我编译这个时,我得到错误:
错误 1 错误 C2440:“正在初始化”:
无法从“const CMDatabase::Try”转换为“CMDatabase::Try
*”c:\program files\microsoft visual studio 9.0\vc\include\functional 296
谁能告诉我我做错了什么以及如何纠正它。