0

std::list を反復処理し、DLL のスレッドからデータを xml に書き込もうとしています。しかし、オブジェクトのより多くのフィールドを XML にダンプすると、XML が作成されません。以下は、私のクラスの詳細と、データを XML に書き込むために使用しているコードです。

class MyClass{
private:
    BSTR member1;
    BSTR member2;
    BSTR member3;
    BSTR member4;
public:
    MyClass();
    ~MyClass();
    BSTR getMember1()
    {
        return member1;
    }
    BSTR getMember2()
    {
        return member2;
    }
    BSTR getMember3()
    {
        return member3;
    }
    BSTR getMember4()
    {
        return member4;
    }
    //Corresponding setters are also present
};

std::list<MyClass> myList;
std::list<MyClass>::iterator iterator;

ofstream outputFile;
outputFile.open("C:\\test.xml",ios::out);
outputFile << "<root>" << endl;
for(iterator=myList.begin();iterator != myList.end();++iterator)
{
     //Not working if more values are dumped
     USES_CONVERSION;
     outputFile << "<Object>" << endl;
     outputFile << "<Member1>" << W2A(CString((*iterator).getMember1())) << "</Member1>" << endl;
     outputFile << "<Member2>" << W2A(CString((*iterator).getMember2())) << "</Member2>" << endl;
     outputFile << "<Member3>" << W2A(CString((*iterator).getMember3())) << "</Member3>" << endl;
     outputFile << "<Member4>" << W2A(CString((*iterator).getMember4())) << "</Member4>" << endl;
     outputFile << "</Object>" << endl;
}
outputFile << "</root>";
outpuFile.close();

誰か助けてくれませんか?

4

1 に答える 1

0

その理由は、値がNULLかどうかを確認せずにファイルに書き込んでいたためです。一部のオブジェクトでは、すべてのメンバーが取り込まれませんでした。

 outputFile << "<Member3>" << W2A(CString((*iterator).getMember3())) << "</Member3>" << endl;

ファイルに書き込む前に、 getMember3()がデータまたは NULL を与えているかどうかを確認する必要があります:)。

/ハレッシュ

于 2012-10-25T11:45:25.390 に答える