我有这个方法:
var app = angular.module("rgMenu",[]); app.controller('itemList', function($scope){ $scope.items = [ {"title":"Google", "description":"Google Search Engine"}, {"title":"Yahoo", "description":"Yahoo Search Engine",
"sublinks":[
{"title":"Yahoo", "href":"http://yahoo.com/", "target":"_blank" },
{"title":"Sports", "href":"http://sports.yahoo.com/", "target":"_blank" },
{"title":"News", "href":"http://news.yahoo.com/", "target":"_blank" }
]},
{"title":"Bing", "description":"Bing Search Engine"},
{"title":"Dogpile", "description":"Dogpile Search Engine"}
];
$scope.sublinks = null;
$scope.showSubMenu = function(item){
$scope.sublinks = item.sublinks;
}});
但它引发了一个错误:
void createSomething(Items &items)
{
int arr[items.count]; // number of items
}
我找到了这个解决方案:
expression must have a constant value
所以我问有没有更好的方法来处理这个?
答案 0 :(得分:7)
您可以使用std::vector
void createSomething(Items &items)
{
std::vector<int> arr(items.count); // number of items
}
你的第一个方法不能工作的原因是在编译时必须知道数组的大小(without using compiler extensions),所以你必须使用动态大小的数组。您可以使用new
自行分配数组
void createSomething(Items &items)
{
int* arr = new int[items.count]; // number of items
// also remember to clean up your memory
delete[] arr;
}
但它更安全,恕我直言更有帮助使用std::vector
。
答案 1 :(得分:1)
Built in arrays
&amp; std::array
始终需要一个常量整数来确定它们的大小。当然,如果dynamic arrays
(使用new
关键字创建的那个)可以使用非常数整数,如图所示。
然而,std::vector
array-type applications
(当然内部只有动态数组)使用a是std::vector
的最佳解决方案。它不仅因为它可以被赋予非常数整数作为大小,而且它可以非常有效地增长和动态增长。加int arr[items.count];
有很多花哨的功能可以帮助你完成工作。
在您的问题中,您只需将std::vector<int> arr(items.count); // You need to mention the type
// because std::vector is a class template, hence here 'int' is mentioned
替换为: -
std::vector
从push_back
开始,您会发现自己比普通数组更喜欢99%的情况,因为它具有数组的灵活性。首先,您不必担心删除它。矢量将处理它。此外,insert
,emplace_back
,emplace
,erase
,writeln
等功能可帮助您进行有效的插入操作。删除它意味着您不必手动编写这些功能。
有关更多参考,请参阅this