2013-01-12 17 views
12

thể trùng lặp:
A function-definition is not allowed here before ‘{’Bug thông qua một single-line comment trước một dòng với một tuyên bố

Tôi muốn chia sẻ lỗi này tôi đã làm trong mã của tôi, một trong những khó tìm thấy:

#include <iostream> 

void StartNuclearWar() { 
    std::cout << "War in progress..." << std::endl; 
} 

int main() 
{ 
    int a = 0; 

    // Get activation codes from C:\codes\ 
    a = 1; 

    if(a == 0) { 
     StartNuclearWar(); 
    } 
} 

Ở đâu?

+0

Tôi muốn xem cuộc chiến hạt nhân! – StackedCrooked

+0

Heh. Tôi nghĩ chỉ có preprocessor xử lý back-slashes theo cách đó – Ancurio

+1

@Ancurio Đó là preprocessor xử lý các chú thích (như trong, thanh lọc chúng khỏi luồng). –

Trả lời

10

Lỗi trong nhận xét: đối với chúng tôi ký tự cuối cùng đại diện cho một thư mục, cho trình biên dịch có nghĩa là dòng sau là một phần của dòng hiện tại. Tất nhiên mọi nhà phát triển đều biết điều đó, nhưng trong trường hợp này, chi tiết này khá ẩn.

+0

Bây giờ nó được tổ chức tốt hơn. +1. –

+1

Thậm chí không Prettify (động cơ ở đây) có thể xử lý một cách chính xác –

+3

Chú ý đến cảnh báo trình biên dịch có thể giúp đỡ đáng kể trong việc tìm kiếm lỗi như vậy. 'MSVC' tạo cảnh báo theo mặc định,' gcc', khi '-Wcomment' (' -Wall') được cung cấp. – Lol4t0

2

Rất tốt, MSDN gọi số này line splicing.

Tất cả các dòng kết thúc bằng một dấu gạch chéo (\) và ngay lập tức theo sau là một ký tự xuống dòng được nối với dòng tiếp theo trong tập tin nguồn hình thành dòng logic từ các dòng vật lý. Trừ khi nó trống, một tệp nguồn phải kết thúc bằng một ký tự dòng mới không phải là dấu gạch chéo ngược.

+0

Rất tiếc, chỉnh sửa nhỏ để hiển thị dấu gạch chéo ngược, vì báo giá của bạn không có ý nghĩa như trước. –

+0

@Damien_The_Unbeliever cảm ơn bạn :) – Steve

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