使用MFC实现Queue的正确方法?

时间:2016-07-12 12:07:18

标签: c++ multithreading mfc

我想要做的是; 在多线程环境中将一些字符串值存储在文本文件中。 然后我将每个字符串值存储在一个队列中,然后逐步读取该队列并将这些值写入文本文件。

我在MSDN中看到了一些关于队列的示例。在该示例中,我进行了一些更改并创建了此代码段以存储CString值。但我无法通过此代码实现此目标。

class CQueue :public CTypedPtrList < CObList, CString* >
{
public:
    void AddToEnd(CString* newLog) {
        AddTail(newLog);
    }
    CString* GetFromFront() {
        return IsEmpty() ? NULL : RemoveHead();
    }
};

然后我尝试这样打电话:

CQueue q;
CString str("data1");
q.AddToEnd(&str);

发出此错误:

'void CObList::AddTail(CObList *)' : cannot convert argument 1 from 'ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>> ' to 'CObject *'

在MFC中实现Queue的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

CString不是对象或更好:它不是从CObject派生的。但是你说列表应该来自CObList。你必须使用CPtrList。

class CQueue :public CTypedPtrList < CPtrList, CString* >

请注意:但即使你的代码非常危险。在您的示例中,您将创建指向堆栈中存在的变量的指针。如果函数存在,则指针变为无效...