c ++表达式必须具有常量值

时间:2015-10-22 18:45:24

标签: c++ arrays

我有这个方法:

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

所以我问有没有更好的方法来处理这个?

2 个答案:

答案 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%的情况,因为它具有数组的灵活性。首先,您不必担心删除它。矢量将处理它。此外,insertemplace_backemplaceerasewriteln等功能可帮助您进行有效的插入操作。删除它意味着您不必手动编写这些功能。

有关更多参考,请参阅this