2013-02-10 34 views
0

我宣布自动类型的测试变量,但现在我不知道如何访问它。我知道如何使这个prograame工作没有auto但在这里我想知道如何访问该auto变量。如何访问此自动变量?

int main() { 
auto test = {'1','S'}; 
std::cout<<test; //error no match for operator... i tried using *test or *test[0] but no solution. 
cin.get(); 
return 0; 
} 

编译器日志:

Compiler: mingw 
Executing g++.exe... 
g++.exe "C:\Users\Arpit\Desktop\delete.cpp" -o "C:\Users\Arpit\Desktop\delete.exe" -std=c++11 
C:\Users\Arpit\Desktop\delete.cpp: In function 'int main()': 
C:\Users\Arpit\Desktop\delete.cpp:5:12: error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&' 
In file included from c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/include/c++/iostream:40:0, 

       from C:\Users\Arpit\Desktop\delete.cpp:1: 
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/include/c++/ostream:600:5: error: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::initializer_list<char>]' 

Execution terminated 

如何打印test

+0

你有没有尝试过'试验[0]',即没有指针引用?另外,你应该可以阅读错误消息,因为它通常提供一些很好的提示。 – 2013-02-10 17:18:38

+0

是的! '我在'test [0]'错误中'找不到'operator']'。 – Arpit 2013-02-10 17:19:43

+1

不匹配什么?我们必须猜测吗? – 2013-02-10 17:19:53

回答

2

你得到这个错误,因为auto variable = { ... }宣布std::initializer_list,其中std::ostream没有超载operator<<。例如,您可以使用基于范围的功能来访问列表中的值。

int main() 
{ 
    auto test = {'1','S'}; 
    for(const auto& elem: test) 
     std::cout << elem << ' '; 
    std::cout << std::endl; 

    return 0; 
} 
+0

感谢您的快速响应。 – Arpit 2013-02-10 17:28:57

+0

如果你只是想要第一个元素,你可以使用'std :: cout << * begin(test)' – balki 2013-02-11 10:21:30

2

变量teststd::initializer_list类型。你必须使用迭代器从它那里得到的值,或新range-based for loop

auto test = { '1', 's' }; 
for (const auto& i : test) 
    std::cout << i << '\n'; 
+0

谢谢。下次我会在发布之前查看编译器日志。 – Arpit 2013-02-10 17:28:38