2009-11-02 7 views
3

구문/구문 분석 오류가 발생하지만 찾을 수 없습니다. 여기 " '<'토큰 앞에 예상 생성자, 소멸자 또는 형식 변환이 있습니다.

DataReader.h:11: error: expected constructor, destructor, or type conversion before '<' token

가 DataReader.h입니다 :

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

#ifndef DATA_H 
#define DATA_H 
#include "Data.h" 
#endif 

vector<Data*> DataReader(); // This is line 11, where the error is.. 

을 그리고이 .cpp 파일입니다 : 나는 그것이 부적절하다고 생각하기 때문에 내가 DataReader를()의 내용을 생략

#include "DataReader.h" 

using namespace std; 

vector<Data*> DataReader() 
{ 
..... 
} 

하지만, 필요한 경우 게시 할 수 있습니다.

의견이나 제안을 보내 주셔서 감사합니다.

답변

5

헤더 파일에 vector이 아닌 std::vector을 명시 적으로 사용해야합니다.

또한, 나는 "Data.h는"형식의 문이 포함 같은데요 :

#ifndef DATA_H 
#define DATA_H 
... 
#endif 

괜찮지 만 당신이 단지 파일 자체 내에서뿐만 아니라 #include "Data.h"을 통해 경비를 포함 사용하지 말아야합니다 .

+0

즉 # ifndef ... #define ....이 Data.h 자체의 맨 위에 있고 #endif가이 파일 끝에 있습니다. (그래서이 헤더를 참조하는 모든 가능한 파일은이 몇 줄을 쓸 필요가 없습니다.) 이것은 단지 스타일 힌트 일 뿐이며 컴파일 오류와 관련이 없습니다. – mjv

+3

포함 된 파일에 '# ifndef'가있는 외부 매크로가 동일한 매크로를 기반으로하는 경우'#include '앞에'# define' 줄이 없어야합니다. 헤더 파일은 절대 포함되지 않습니다. –

4

헤더 파일에 DataReader이라는 함수 선언에 vector이 아닌 std::vector을 사용해야합니다.

이 표준은 <vector>vector 클래스 템플릿은 std 네임 스페이스에 정의되어야하고 헤더 파일의 선언이 using namespace std; 또는 using std::vector; 어떤 전에 발생 원인이 있습니다.

4

using namespace std;은 범위에 포함되지 않으므로 머리글에 std::vector<Data*> DataReader();을 작성해야한다고 생각합니다.

1

Datareader 앞에 std : vector를 사용하고 vector가 아닙니다.

관련 문제