2009-11-02 164 views
3

我遇到了語法/解析錯誤,但似乎找不到它。「之前期望的構造函數,析構函數或類型轉換」<'token「

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文件:

#include "DataReader.h" 

using namespace std; 

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

我跳過的DataReader()的內容,因爲我認爲這是無關緊要的,但如果需要,我可以發佈它。

感謝您的任何意見/建議。

回答

5

在你的頭文件中,你需要明確地使用std::vector而不僅僅是vector

而且,我猜,「Data.h」包含表單的語句:

#ifndef DATA_H 
#define DATA_H 
... 
#endif 

這很好,但你不應該使用這些包括警衛跨越#include "Data.h"爲好,只有在文件中。

+0

即在Data.h本身的頂部有#ifndef ... #define ....,在這個文件的結尾有#endif。 (所以引用這個頭文件的所有可能的文件都不需要寫這幾行)。但這只是一種風格提示,與編譯錯誤無關。 – mjv 2009-11-02 08:01:40

+3

如果包含的文件具有'#ifndef'警衛,並且基於與外層'#ifndef'相同的宏,那麼在'#include'之前沒有'#define'行是至關重要的,否則就會導致頭文件將永遠不會被包含。 – 2009-11-02 08:05:20

4

在您的頭文件中,您需要使用std::vector而不是vector函數DataReader的聲明。

標準包括:<vector>引起std命名空間中定義的vector類模板,並在你的頭文件中的聲明之前的任何using namespace std;using std::vector;發生。

4

我認爲在您的頭文件中,您可能需要編寫std::vector<Data*> DataReader();,因爲using namespace std;不在範圍內。

1

在Datareader之前使用std:vector而不是vector。

相關問題