2017-08-05 53 views
-7

我是新的C++,任何人都可以解释的意思这个?:C++数组运算符[]不允许?

敌不过 '操作[]'(操作数类型是 '的std :: initializer_list' 和 'INT')

在这个程序:

#include <algorithm> 
#include <array> 
#include <iostream> 

using namespace std; 

void 
print_array(const auto& range) 
{ 
cout << endl; 
for (auto& element : range) 
    cout << element << ' '; 
cout << endl; 
} 

void 
sort(auto& range) 
{ 
for (int i = 0; i < range.size() - 1; i++) { 
    swap(range[i], min_element(range[i + 1], range[range.size() - 1])); 
} 
} 

int 
main() 
{ 
auto arr = { 1, 4, 2, 0, 9, 11 }; 

print_array(arr); 
sort(arr); 
print_array(arr); 

return 0; 
} 

编译:

g++ main.cpp -Ofast -std=gnu++17 
main.cpp: In instantiation of ‘void sort(auto:2&) [with auto:2 = std::initializer_list<int>]’: 
main.cpp:30:11: required from here 
main.cpp:20:15: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘int’) 
    swap(range[i], min_element(range[i + 1], range[range.size() - 1])); 
     ~~~~~^ 
main.cpp:20:37: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘int’) 
    swap(range[i], min_element(range[i + 1], range[range.size() - 1])); 
           ~~~~~^ 
main.cpp:20:51: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘std::initializer_list<int>::size_type {aka long unsigned int}’) 
    swap(range[i], min_element(range[i + 1], range[range.size() - 1])); 

因为我说我是C++新手,解释/演示'std :: initializer_list如何工作或给出相关链接或演示如何在这种情况下正确访问范围[索引]将比获取触发和downvoting更有帮助。

谢谢您的阅读。

+0

的操作数'的std :: initializer_list'和'int',而不是一个数组,'int'尝试看看它 –

+0

作为一个侧面说明,你不能在参数声明中使用'auto'符像那样。首先阅读[这些C++书籍](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)之一。 – Ron

+0

可能的重复[有没有办法将自动作为参数传递给C++?](https://stackoverflow.com/questions/29944985/is-there-a-way-to-pass-auto-as-an-参数-在-c)的 – user4581301

回答

-1

我以前从未使用数组,所以希望有人会纠正我,如果我做了愚蠢的事情.... 所以一些关于C++的是你总是需要了解你正在使用什么类型的数据,除非你只是通过它。所以,1)让我强烈建议你暂时不要使用auto。 2)array是....对初学者来说有点问题。这有点像在同一时间抛出所有的C无意义和所有C++的废话。暂时尝试使用C风格的阵列还是listlist有一个排序功能。

#include <algorithm> 
#include <array> 
#include <iostream> 

using namespace std; 

void 
print_array(const array<int, 6>& range) 
{ 
    cout << endl; 
    for (auto& element : range) 
    cout << element << ' '; 
    cout << endl; 
} 

void 
randomlySwap(array<int, 6>& range) 
{ 
    //does not sort..exercise for reader 
    for (int i = 0; i < range.size() - 1; i++) 
    { 
    swap(range[i], range[i+1]); 
    } 
} 

int 
main() 
{ 
    array<int, 6> arr = { 1, 4, 2, 0, 9, 11 }; 

    print_array(arr); 
    randomlySwap(arr); 
    print_array(arr); 
} 
相关问题