2016-07-12 14 views
0

私がしたいのは、マルチスレッド環境のテキストファイルにいくつかの文字列値を格納します。 次に、各文字列の値をQueueに格納し、そのキューをステップごとに読み取り、その値をテキストファイルに書き込みます。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でキューを実装するための最良の方法は何ですか?

答えて

1

CStringはオブジェクトでもそれ以上のものでもありません.CStringから派生したものではありません。しかし、リストはCObListから派生するべきだと言った。代わりにCPtrListを使用する必要があります。

class CQueue :public CTypedPtrList < CPtrList, CString* > 

注意:コードよりも危険です。サンプルでは、​​スタック上に存在する変数へのポインタを作成します。関数が存在する場合、ポインタは無効になります...

+0

CString *型整数の取得中に別の問題が発生しました。 124を格納する例として、他の2,4つの番号が1つしか印刷されません。 ? – Elshan

+0

これは新しい質問です...ちょうど文字を出力している可能性があります – xMRi

+0

はいこれは新しい質問です。私は値を得るために**(ポインタのポインタ)を使用しました – Elshan

関連する問題