2009-11-02 103 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。

相关问题