在c ++中

时间:2018-05-02 08:26:43

标签: c++ cpprest-sdk

我正面临着一个我不理解的c ++问题。

这是我的代码:

auto DataArray = jvalue.at(U("data")).as_array();
std::cout << "Outside the loop, first output" << std::endl;

for (int i = 0; i <= 10; i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}

std::cout << "Outside the loop, second output" << std::endl;

输出:

Outside the loop, first output
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
Press any key to continue . . .

似乎代码在循环结束后停止。 但为什么呢?

但如果我注释掉了

//auto data = DataArray[i];
//auto dataObj = data.as_object();

它没有问题。

顺便说一句,我正在使用cpprest并从api获取json对象数据。 jvalue变量保存结果。

如果我试着抓住代码:

try {
    auto data = DataArray[i];
    auto dataObj = data.as_object();
    std::wcout << "inside the loop" << std::endl;
}
catch (const std::exception& e) {
    std::wcout << e.what() << std::endl;
}

结果是带有输出的无限循环:not an object

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您应该在循环中使用i < 10代替i <= 10

for (int i = 0; i < 10; i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}

您的上一次迭代未在循环内输出。它失败了,没有DataArray[10]有10个索引

更好的方法是使用DataArray.size()代替i < 10

for (int i = 0; i < DataArray.size(); i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}