如何在响应中指定pointee值时取消引用指针

时间:2015-09-21 07:52:08

标签: c++ pointers exchangewebservices dereference gsoap

我希望取消引用一个指针firsm->RootFolder->TotalItemsInView,该指针在响应到达时取值。

ns1__MessageType* messgT = new ns1__MessageType();
std::vector<ns1__MessageType> v;
int count;

ews__FindItemResponseMessageType *firsm = new ews__FindItemResponseMessageType();
firsm->RootFolder = new ns1__FindItemParentType();
count = *firsm->RootFolder->TotalItemsInView;

for(int i=0; i < count; i++){
    v.push_back(messgT[i]);
    std::cout << "Hello"  << std::endl;
}

TotalItemsInViewns1__FindItemParentType类中定义。

class ns1__FindItemParentType
{ public:
       int* TotalItemsInView ;
};

这里TotalItemsInView将响应SOAP请求而具有整数值。我想在count中使用该整数值来运行&#39; for循环&#39;很多次。

在编辑中我得到Segmentation fault可能是因为TotalItemsInView处的空值,但作为回应它会有价值,所以我该怎么办呢。我是指针的新手,任何帮助表示赞赏。谢谢。

更新: 我的XML接收日志:

<m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
    <m:ResponseMessages>
        <m:FindItemResponseMessage ResponseClass="Success">
            <m:ResponseCode>NoError</m:ResponseCode>
            <m:RootFolder TotalItemsInView="2" IncludesLastItemInRange="true">
                <t:Items>
                    <t:Message>
                        <t:ItemId Id="b30rTZMma5" ChangeKey="CQAAABAAAAAWl"/>
                    </t:Message>
                    <t:Message>
                        <t:ItemId Id="tNFsAAAIFUA" ChangeKey="CQAAAAAAWT"/>
                    </t:Message>
                </t:Items>
            </m:RootFolder>
        </m:FindItemResponseMessage>
    </m:ResponseMessages>
</m:FindItemResponse>

1 个答案:

答案 0 :(得分:0)

我在firsm->RootFolder = new ns1__FindItemParentType()处错了,我试图初始化一个空值的响应结构,这就是我解除它的问题。 所以正确的方法是

ews__FindItemResponseMessageType *firsm = new ews__FindItemResponseMessageType();
firsm = findItemRes.ews__FindItemResponse->ResponseMessages->__union_ArrayOfResponseMessagesType->union_ArrayOfResponseMessagesType.FindItemResponseMessage;
count = *firsm->RootFolder->TotalItemsInView;