2015-06-20 66 views
0

我是C++編程的初學者。我試着編寫一個非常簡單的程序,它結合了模板的使用,將數組作爲參數傳遞給一個函數和一個基於範圍的for循環。這是我使用Eclipse Luna CDT軟件編寫和編譯的程序。使用基於範圍的循環的錯誤 - Eclipse CDT Luna

#include <iostream> 
using namespace std; 

template <typename T> 
void display (T myArray[]) 
{ 
    int i = 1; 
    for (T c : myArray) 
    { 
     cout << i << " element is " << c << endl; 
     ++i; 
    } 
} 

int main() 
{ 
    int numArray[] {1, 2, 3}; 
    char charArray[] {'a', 'b', 'c'}; 

    display<int>(numArray); 
    display<char>(charArray); 

    return 0; 
} 

但是,當我保存此文件並構建它時,它說第8行有錯誤,突出顯示了基於範圍的for循環。編譯器特別聲明「'開始'和'結束'未在此範圍內聲明」。編譯器是mingw-w64並且已經爲C++ 11設置。我如何解決這個錯誤?

謝謝你的回答。

回答

0

要使用基於for循環的範圍內,你將需要使用std::array代替C風格的數組。我修改了你的代碼,這樣就可以工作請注意,您需要將-std=c++11標誌傳遞給編譯器。

#include <array> 
#include <iostream> 
using namespace std; 

template <typename T> 
void display (T myArray) 
{ 
    int i = 1; 
    for (auto c : myArray) 
    { 
     cout << i << " element is " << c << endl; 
     ++i; 
    } 
} 

int main() 
{ 
    std::array<int, 3> numArray {1, 2, 3}; 
    std::array<char, 3> charArray {'a', 'b', 'c'}; 

    display(numArray); 
    display(charArray); 

    return 0; 
} 
+0

當我將修改添加到程序中時,它可以很好地工作。你能告訴我爲什麼一個C風格的陣列不起作用嗎?是否因爲它與C++ 11添加不兼容?非常感謝。 –

+0

@RamSidharthNair基於循環的範圍使用「開始」和「結束」迭代器。 C風格的數組沒有它們,所以你需要使用一個容器,例如std :: array,std :: vector等 – December

+0

現在我完全理解了。非常感謝。 –

-2
在C++

沒有「每個」像在其他語言如PHP等等

,所以你得告訴數組結束的功能,因爲如果你給一個數組的功能,它只得到起始postition的指針...

這應該爲你工作:

#include <iostream> 
using namespace std; 

template <typename T> 
void display (T myArray[], int arraysize) 
{ 
    for (int i = 0; i < arraysize ;i++) 
    { 
     cout << i+1 << " element is " << myArray[i] << endl; 
    } 
} 

int main() 
{ 
    int numArray[] = {1, 2, 3}; 
    char charArray[] = {'a', 'b', 'c'}; 

    display<int>(numArray, 3); 
    display<char>(charArray, 3); 

    return 0; 
+0

我也驚訝地看到不等的語法,但後來我用Google搜索,發現,直到C++ 11它在C++中確實存在:http://en.cppreference.com/w/cpp/language/range - for – MaMazav

+0

在C++ 11中添加了基於循環的範圍。 – December

+0

然後它可能會解決問題,而不是給出數組的開始指針,而是數組的引用(如鏈接的示例中所做的)? –