2012-01-09 38 views
12

Trên 2 trong tổng số vòng, tôi nhận được lỗi sau từ gcc:C++ cho vòng lặp cấu trúc với nhiều khởi biến

error: expected unqualified-id before 'int' 

Tôi không chắc chắn những gì tôi đang mất tích. Tôi đã xem qua tài liệu về cách thức cho vòng lặp nên nhìn và tôi vẫn còn bối rối. Có gì sai ở đây?

#include <iostream> 
#include <vector> 

int main() { 
std::vector<int> values; 

for (int i = 0; i < 20; i++) { 
    values.push_back(i); 
} 

std::cout << "Reading values from 'std::vector values'" << std::endl; 
for (int i = 0, int col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 

Trả lời

15

Cố gắng mà không có sự int trước col.

for (int i = 0, col = 0; i < values.size(); i++, col++)

+0

Cảm ơn bạn - Tôi đã không nhận thấy điều này chút nào. – jdphenix

+0

Chúng ta có thể thực hiện thao tác logic giữa hai điều kiện liên quan đến các biến 'i' và' j' trong trình giữ chỗ cho điều kiện trong vòng lặp 'for' không? – Chaitanya

+0

@Chaitanya yes. – jweyrich

3

này nên sửa chữa nó

for (int i = 0, col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 

Một định nghĩa biến đi như thế

datatype variable_name này [= init_value] [, variable_name [= init_value]] *;

+1

Câu cuối cùng không thực sự đúng. Ví dụ, sau đây là hợp lệ: 'int w, * x, (* y) (int, int), z;' –

+0

Tôi đồng ý! Tôi không thể tìm thấy định nghĩa khai báo biến của C++. Do đó đã đưa ra một biểu diễn trừu tượng của một khai báo var. tên biến ở đây không xác nhận nghiêm ngặt [a-zA-Z] [a-zA-Z0-9] *. Nó cũng có thể có nghĩa là * x, ví dụ: int w = 10, * x = NULL; Cảm ơn bạn đã làm rõ! :) –

7

Những người khác đã cho bạn biết cách khắc phục sự cố bạn đã nhận thấy. Trên một lưu ý khá khác nhau, trong việc này:

if (col > 10) { std::cout << std::endl; col == 0; } 

Có vẻ như gần như chắc chắn rằng tuyên bố mới nhất ở đây: col==0; thực sự là dự định được col=0;.

+0

Điều đó đúng - đây là một trường hợp thử nghiệm đơn giản mà tôi đặt cùng nhau cho câu hỏi. Nắm bắt tốt – jdphenix

2

Đừng tuyên bố int sau khi sử dụng dấu phẩy,

for (int i = 0,col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 
0

Đây là giống như một bội số biến thường xuyên khai/khởi tạo trong một dòng bằng cách sử dụng toán tử dấu phẩy. Bạn có thể làm điều này:

int a = 1, b = 2; 

tuyên bố 2 ints. Nhưng không phải điều này:

int a = 1, int b = 2; //ERROR 
Các vấn đề liên quan