2010-11-11 33 views
5

Bạn có thể giải thích lỗi tiêu đề thường có nghĩa gì không?lỗi: biểu thức chính được mong đợi trước mã thông báo X

Tôi nhận được nó đôi khi và tôi luôn luôn cố gắng sửa chữa nó một cách tình cờ, nhưng tôi vẫn không có một đầu mối ý nghĩa của nó.

Dưới đây là một ví dụ từ lỗi hiện tại của tôi:

Lca<RankVec, VertexVec> lca(graphList[0], dset, ss&); 

error: expected primary-expression before ')' token

+0

Làm thế nào về một ví dụ? – TonyK

+0

Đó có phải là một tuyên bố chức năng hay một cuộc gọi hàm? – MSalters

+0

@MSalters gọi hàm –

Trả lời

2

Biểu tượng & được sử dụng làm toán tử AND. I E. 0x3 & 0x5 == 0x1. Trong biểu mẫu này, nó là một toán tử kết hợp giữa hai biểu thức. Từ những gì bạn đã nói với chúng tôi, bây giờ chúng ta biết rằng ss là một biểu thức. Do đó, trình biên dịch nghĩ rằng ss & là khởi đầu của một biểu thức bitwise AND, và nó mong đợi phía bên tay phải (mà nó gọi là "biểu thức chính"). Tuy nhiên, thay vì một bên tay phải, trình biên dịch gặp ). Đó rõ ràng không phải là mặt bên phải của biểu thức AND.

3

Khó có thể nói mà không cần bất kỳ mẫu, nhưng IIRC điều này xảy ra do hậu quả của việc sử dụng một biểu tượng không xác định (ví dụ như một chức năng hoặc một loại mà không có một khai báo - không chắc chắn chính xác). Kết quả là, trình phân tích cú pháp bị nhầm lẫn và không biết những gì mong đợi thêm trong mã.

- (Tôi tin rằng lỗi này chỉ xuất hiện trong kết hợp với các lỗi khác Hoặc bạn có thể cung cấp một đoạn mã mà sẽ cung cấp duy nhất lỗi này trên trình biên dịch GCC?) -

chỉnh sửa: Trong đoạn mã mà bạn cung cấp , nó chỉ là trình phân tích cú pháp bị mất sau khi gặp phải biểu tượng "&" ở một vị trí bất hợp pháp - do đó, hậu quả của cú pháp không hợp lệ, không phải là ngữ nghĩa không hợp lệ.

Thông báo lỗi khó hiểu (hoặc thường tệ hơn) là hậu quả của ngữ pháp của C++ là không thể xác định và trình biên dịch, khi nhìn thấy lỗi, không thể đoán được những gì được cho là ở đó và do đó không thể tạo mô tả chính xác hơn .

0

Khó khăn để đề xuất với thông tin trong OP vào lúc này, nhưng hãy để tôi thử.

Giả sử rằng mọi thứ khác được đặt ra, cho biểu thức trong OP là cuộc gọi hàm, hãy thử thay đổi cách bạn chuyển đối số cuối cùng. Nếu bạn muốn chuyển nó như một con trỏ, bạn phải sử dụng & trước tên và không phải sau đó.

Lca<RankVec, VertexVec> lca(graphList[0], dset, &ss); 
2

Từ tài liệu chuẩn., 5.1 biểu tiểu,

Primary expressions are literals, names, and names qualified by the scope resolution operator ::.

Và cũng từ 2,6 Tokens,

There are five kinds of tokens: identifiers, keywords, literals,16) operators, and other separators

Bây giờ, tôi tin rằng lỗi là khá mô tả. .

Ho pe giúp bạn ..

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