2013-06-24 42 views
14
#include <cstdlib> 
#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string str("hello world!"); 
    for (auto &c : str) 
     c = toupper(c); 
    cout << str; 
    return 0; 
} 

Mã C++ này không biên dịch. Thông báo lỗi: main.cpp: 21: lỗi: định nghĩa hàm không được phép ở đây trước ':' mã thông báo Câu hỏi: Có mỗi vòng lặp trong C++ (phạm vi cho vòng lặp không?)? điều gì sai với mỗi vòng lặp ở trên?Cách sử dụng cho mỗi vòng lặp trong C++

Xin cảm ơn trước.

+5

Nó tồn tại trong C++ 11. Hãy chắc chắn rằng bạn sử dụng một trình biên dịch có thể xử lý C++ 11, và chắc chắn rằng bạn cho phép các tùy chọn cần thiết cho điều đó. – jogojapan

+0

http://stackoverflow.com/q/15027282/62576 –

Trả lời

16

Mã này là hợp lệ, như thể được chứng minh trên một online compiler.

Vui lòng tham khảo tài liệu trình biên dịch của bạn để chắc chắn bạn đã bật C++ 11. Tùy chọn này thường được gọi là -std=c++11. Bạn có thể phải tải xuống bản nâng cấp; kiểm tra trình quản lý gói của bạn cho GCC (hiện tại là 4.8) hoặc Clang (hiện tại 3.3).

4

Trước C++ 11x, for_each được xác định trong tiêu đề algorithm. Đơn giản chỉ cần sử dụng:

for_each (vec.begin(), vec.end(), fn); 

nơi fn là một chức năng mà phần tử sẽ được thông qua, và hai đối số đầu tiên là vòng lặp đầu vào.

Ngoài ra, sau bao gồm cả stringalgorithm bạn chỉ có thể sử dụng

std::transform(str.begin(), str.end(),str.begin(), ::toupper);

+4

'std :: for_each' vẫn được xác định trong tiêu đề' thuật toán', ngay cả trong C++ 11. (Phạm vi cho vòng lặp được giới thiệu bởi C++ 11 vào lõi ngôn ngữ đã không thay thế thuật toán 'std :: for_each', mặc dù có một số chồng chéo trong các trường hợp sử dụng.) – jogojapan

Các vấn đề liên quan