C++ &引用;在'之前应进行构造函数、析构函数或类型转换<';代币;

C++ &引用;在'之前应进行构造函数、析构函数或类型转换<';代币;,c++,constructor,destructor,C++,Constructor,Destructor,我遇到语法/解析错误,但似乎找不到它 DataReader.h:11:错误:在头文件中“之前需要构造函数、析构函数或类型转换,您需要显式使用std::vector,而不仅仅是vector 另外,我猜“Data.h”包含以下形式的语句: #ifndef DATA_H #define DATA_H ... #endif 这很好,但是您不应该在中使用这些include-guard,也不应该在文件本身中使用include“Data.h”。在头文件中,您需要在函数DataReader的声明中使用std:

我遇到语法/解析错误,但似乎找不到它


DataReader.h:11:错误:在头文件中“之前需要构造函数、析构函数或类型转换,您需要显式使用
std::vector
,而不仅仅是
vector

另外,我猜“Data.h”包含以下形式的语句:

#ifndef DATA_H
#define DATA_H
...
#endif

这很好,但是您不应该在
中使用这些include-guard,也不应该在文件本身中使用include“Data.h”

在头文件中,您需要在函数
DataReader
的声明中使用
std::vector
而不是普通的
vector


标准include
导致在
std
命名空间中定义
向量
类模板,并且头文件中的声明发生在使用命名空间std的任何
之前
使用std::vector

我认为在标题中可能需要编写
std::vector DataReader()
作为
使用名称空间std不在范围内。

在Datareader之前使用std:vector和not vector。

即,如果没有#定义在Data.h本身的顶部,以及#endif在此文件的末尾。(因此,引用此标头的所有可能文件不需要写入这几行)。这只是一个样式提示,与编译错误无关,但是,如果包含的文件具有与外部
#ifndef
保护相同的宏,则在
#include
之前不要有
#define
行,这一点非常重要,否则将永远不会包含头文件的内容。
#include "DataReader.h"

using namespace std;

vector<Data*> DataReader()
{
 .....
}
#ifndef DATA_H
#define DATA_H
...
#endif