我在MFC vc ++中有我的项目。我将UI和业务逻辑层与数据访问层分开。 我有一个函数,它从数据库中选择一些数据到CRecordset对象。此选择查询在数据访问层中处理。当我尝试返回记录集(使用数据在UI中构建表)时,我收到错误。
我试过了:
CRecordset COrderSearch::ExecuteSqlQuery(CString query)
{
CString sqlQuery;
CRecordset records;
CDatabase database;
sqlQuery = L"SELECT * FROM USers";
SetConnectionStr(connectionString); //set the connection string
ConnectToDatabase(); //database.open()
records.m_pDatabase = &database;
records.Open(CRecordset::dynaset, sqlQuery, CRecordset::readOnly);
return records;
}
我得到的错误:
error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
答案 0 :(得分:3)
CObject
是一个不可复制的类。复制c'tor是私有的,以防止复制。
由于CRecordset
继承自CObject
,并且未提供自己的复制构造函数。它也不可复制。按值返回需要存在复制(或移动)构造函数。
所以你唯一的办法就是使用“输出参数”;让调用者通过CRecordset
应该填充的ExecuteSqlQuery
:
void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) {
// populate outRecords
}
或者将智能指针返回到CRecordset
。