2013-02-10 91 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