2009-10-15 25 views
13

Tôi đang cố biên dịch mã của mình để kiểm tra chức năng đọc và in tệp dữ liệu, nhưng tôi nhận được lỗi biên dịch mà tôi không hiểu - "error: constructor dự kiến, destructor hoặc loại chuyển đổi trước ';' mã thông báo". Tường của văn bản mã có liên quan dưới đây.Lỗi: trình xây dựng dự kiến, trình phá hủy hoặc chuyển đổi loại trước ';' mã thông báo?

struct Day 
{ 
    int DayNum; 
    int TempMax; 
    int TempMin; 
    double Precip; 
    int TempRange; 
}; 

struct Month 
{ 
    Day Days[31]; 
    int MonthMaxTemp; 
    int MonthMinTemp; 
    double TotalPrecip; 
    int MonthMaxTempRange; 
    int MonthMinTempRange; 
    double AverageMaxTemp; 
    double AverageMinTemp; 
    int RainyDays; 
    double AveragePrecip; 
}theMonth; 

double GetMonth(); 

double GetMonth() 
{ 
    for (int Today = 1; Today < 31; Today++) 
    { 
     cout << theMonth.Days[Today].TempMax << theMonth.Days[Today].TempMin; 
     cout << theMonth.Days[Today].Precip; 
    } 
    return 0; 
} 

GetMonth(); // compile error reported here 
+0

Bạn không thể chỉ gọi GetMonth() tại đây. đặt nó vào chính() .... – alexkr

Trả lời

19

Dòng với lỗi có vẻ như bạn đang cố gắng gọi getMonth - nhưng bạn chỉ có thể làm điều đó bên trong một hàm:

#ifdef TEST 
int main() { 
    GetMonth(); 
    return 0; 
} 
#endif 
+0

Bạn có thể gọi một hàm bên ngoài một hàm, nếu nó là bộ khởi tạo. Xem câu trả lời của AndreyT: http://stackoverflow.com/questions/1573168/error-expected-constructor-destructor-or-type-conversion-before-token/1573344#1573344 –

4

Trong C/C++, bạn không thể chỉ cần thêm mã thực thi vào phần đầu của tệp tiêu đề hoặc tệp thực thi (.c, .cpp, .cxx, etc ...). Thay vào đó, bạn phải thêm nó vào một hàm. Nếu bạn muốn chạy mã khi khởi động, hãy nhớ thêm mã vào phương thức chính.

int main(int argc, char *argv[]) { 
    GetMonth(); 
} 
3

Chương trình C++ không thực thi trong ngữ cảnh chung. Điều này có nghĩa là bạn cần phải gọi hàm GetMonth vào một hàm để nó chạy. int main() { } có thể phù hợp.

16

(Ngoài các câu trả lời khác.) Để thực hiện chức năng 'GetMonth()', bạn phải gọi hàm này từ một hàm khác ('chính' hoặc bất kỳ thứ gì được gọi từ 'chính') hoặc sử dụng nó trong trình khởi tạo biểu hiện của một đối tượng khai báo tại phạm vi không gian tên, như trong

double global_dummy = GetMonth(); 

Tuy nhiên, các phương pháp sau có thể bị ảnh hưởng từ vấn đề trật tự khởi tạo, đó là lý do tại sao nó được khuyến khích sử dụng phương pháp cũ bất cứ khi nào có thể.

+1

+1 để đề cập đến trình khởi tạo chung. –

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