【问题标题】:Return struct array from function c++从函数c ++返回结构数组
【发布时间】:2016-04-21 15:38:03
【问题描述】:

我正在尝试从函数传递结构数组。我搜索了很多,但无法找到解决方法。以下是我正在尝试的代码。

struct menuItemType
{
    int itemNo;
    string menuItem;
    double price;
};

void getData(menuItemType *menuList[10])
{
    menuList[0]->itemNo = 111;  
    menuList[0]->menuItem = "Apple";    
    menuList[0]->price = 2.00;

    ....
    menuList[0]->itemNo = 120;  
    menuList[0]->menuItem = "Chocolate";    
    menuList[0]->price = 5.00;
}

int main()
{
    /* i know that i can't return a array. but i want to get the menuList[10] values here. 
    not sure which code i have to use..*/
}

【问题讨论】:

  • 抱歉输入问题。我的意思是 int main(){}
  • std::array可以从函数返回的数组的薄包装。
  • "我知道我不能返回一个数组" erm.. 不,你可以返回(几乎)任何东西,除非函数被声明为void ;)
  • @tobi303 您不能在 C++ 中声明返回 C 样式数组的函数(实际上它可以返回指针)。
  • @Zereges 不,你不能。但是如果您可以返回 std::array 或一些自定义包装器,谁需要它?

标签: c++ arrays function struct


【解决方案1】:

您的void getData(menuItemType *menuList[10]) 不会返回任何内容。相反,它将数据填充到输入参数指向的内存中。

int main()
{
    menuItemType data[10];
    getData(&data);
    std::cout << data[9].menuItem << std::endl; // Chocolate
}

但是,您为什么坚持使用低级数组?请改用std::vector

std::vector<menuItemType> getData()
{
    std::vector<menuItemType> data;
    data.push_back({111, "Apple", 2.00});
    ...
    data.push_back({120, "Chocolate", 5.00});
    return std::move(data);
}

int main()
{
    std::vector<menuItemType> data = getData();
    std::cout << data[9].menuItem << std::endl; // Chocolate
}

它将打印Chocolate,因为我认为您的代码中有错字。

【讨论】:

  • 如果您想实际按 itemNo 索引(大概将 itemNo 分解出结构),也可以使用 std::map 。或者你可以使用 boost::multi_index 如果你想变得雄心勃勃,这将允许你按多个属性索引(按 itemNo 散列,按价格排序等)
  • 但这不是 OP 要求的。那应该去code review
  • 感谢您的帮助,但这会导致编译错误:main.cpp:17:20: 警告:扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++ 11 data.push_back({111, "苹果", 2.00}); main.cpp:19:12: 错误:'move' 不是'std' 的成员 return std::move(data); main.cpp:在函数“int main()”中:main.cpp:25:18:错误:函数“std::vector getData()”getData(&data) 的参数太多; ^ main.cpp:14:27: 注意:在这里声明 std::vector getData()
猜你喜欢
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2016-12-09
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多