2010-02-12 47 views
7

tôi không thể loại bỏ các lỗi này ... tôi có dấu chấm phẩy ở mọi nơi tôi đã kiểm tra ... mã đơn giản: lỗi sẽ đưa tôi đến định nghĩa "tên chuỗi" trong article.h ...lỗi C2146: lỗi cú pháp: thiếu ';' trước khi nhận dạng

main.cpp

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <string> 

using namespace std; 

#include "article.h" 

int main() 
{ 
string si; 
char article[128]; 
vector<Article> articles; 
ifstream file; 


file.open("input.txt",ifstream::in); 

while(!file.eof()) 
{ 
    file.getline(article,128); 
    articles.push_back(Article(article)); 

} 

file.close(); 

while(1); 
return(1); 
} 

article.h:

#ifndef Article_H 
#define Article_H 

class Article 
{ 
public: 
int year; 
string name; 

Article(char *i_name); 
}; 

#endif 
+1

Bạn đang biên dịch nó như thế nào? –

+0

Nó biên dịch theo OSX - vì vậy chúng tôi cần thêm thông tin – Mark

+0

Có vẻ như nó sẽ hoạt động với tôi và nó hoạt động trên GCC. 'bằng cách sử dụng không gian tên std;' trước khi bao gồm một tập tin là lý do tại sao các cuộc chiến tranh xảy ra, và bạn nên xấu hổ về bản thân ;-) Nhưng ngoài việc đó, tốt. Có thể bạn đang nhìn vào tệp nguồn sai, và có một số tệp nguồn khác bao gồm article.h mà không làm cho 'string' trở thành một kiểu hợp lệ? –

Trả lời

12

Bạn nên thêm:

#include <string> 

vào tệp tiêu đề "article.h" của bạn và khai báo tên như sau:

std::string name; 
+2

Đó là sự thật, bạn nên, nhưng tôi không hiểu tại sao nó sẽ tạo ra bất kỳ sự khác biệt nào cho dù mã biên dịch trong trường hợp này. –

+4

ngôn ngữ lớn nhất thế giới (IMHO), có các lỗi ít người biết đến nhất. Tôi nhớ java vì nó là lỗi đẹp, bạn có thể biết chính xác những gì là sai với mã của bạn, ngay cả khi bạn đang viết. À ... – vvMINOvv

3

có vẻ như loại string không được định nghĩa trong file artivle.h. Cố gắng bao gồm iostream và thêm using namespace std (hoặc viết std::string thay vì sử dụng namespace)

+2

Không bao gồm 'iostream' trong article.h: include' string', đó là tất cả các tiêu đề cần. –

+0

Đây là cách thực hành tốt vì mỗi tiêu đề phải được biên dịch nếu có riêng. Tuy nhiên trong trường hợp của mình nó không quan trọng như chuỗi được định nghĩa trước khi article.h được bao gồm – Mark

3

Bạn nên sử dụng tiền tố std :: namespace trong tiêu đề, như

std::string name; 
+2

Việc đưa 'không gian tên sử dụng std' trước khi' # include' có nghĩa là điều này là không cần thiết và không thực sự giải thích các lỗi. Điều đó nói rằng, dựa vào một ai đó để đặt một 'namespace std' trước khi bao gồm header là một thực hành khá tệ – Glen

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