使用基于范围的 for 循环时出错 - Eclipse CDT Luna
Error using range-based for loop - Eclipse CDT Luna
我是 C++ 编程的初学者。我尝试编写一个非常简单的程序,它结合使用模板、将数组作为参数传递给函数和基于范围的 for 循环。这是我使用Eclipse Luna CDT软件编写和编译的程序。
#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 循环。编译器明确指出“'begin' 和 'end' 未在此范围内声明”。编译器是 mingw-w64 并且已经针对 C++11 进行了设置。我该如何解决这个错误?
谢谢你的回答。
在 c++ 中没有 "for each" 像在其他语言中一样 php 等等...
所以你必须告诉函数数组结束的位置,因为如果你给函数一个数组,它只会得到一个起始位置的指针...
这应该适合你:
#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;
要使用基于范围的 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;
}
我是 C++ 编程的初学者。我尝试编写一个非常简单的程序,它结合使用模板、将数组作为参数传递给函数和基于范围的 for 循环。这是我使用Eclipse Luna CDT软件编写和编译的程序。
#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 循环。编译器明确指出“'begin' 和 'end' 未在此范围内声明”。编译器是 mingw-w64 并且已经针对 C++11 进行了设置。我该如何解决这个错误?
谢谢你的回答。
在 c++ 中没有 "for each" 像在其他语言中一样 php 等等...
所以你必须告诉函数数组结束的位置,因为如果你给函数一个数组,它只会得到一个起始位置的指针...
这应该适合你:
#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;
要使用基于范围的 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;
}