使用 MFC 实现队列的正确方法?
Posted
技术标签:
【中文标题】使用 MFC 实现队列的正确方法?【英文标题】:Proper way to implement Queue with MFC? 【发布时间】:2016-07-12 12:07:17 【问题描述】:我想做的是;在多线程环境中的文本文件中存储一些字符串值。 然后我将每个字符串值存储在一个队列中,然后逐步读取该队列并将该值写入文本文件。
我在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 中实现队列的最佳方式是什么?
【问题讨论】:
【参考方案1】:CString 不是对象或更好:它不是从 CObject 派生的。但是你说列表应该来自CObList。您必须改用 CPtrList。
class CQueue :public CTypedPtrList < CPtrList, CString* >
请注意:但即使比你的代码也很危险。在您的示例中,您创建了一个指向堆栈中存在的变量的指针。如果函数存在,则指针无效...
【讨论】:
现在我在获取 CString* 类型整数时遇到了另一个问题。例如,如果我们存储 124;它只会打印另外 1 个缺少 2,4 个数字。 ? 这是一个新问题...可能你只是输出一个字符, 是的,这是一个新问题。我用**(指针的指针)来获取值 你应该打开一个新的。使用 ** 将始终只返回第一个字符。请学习 C++ 基础知识。以上是关于使用 MFC 实现队列的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章