命名空间'std'中的'vector'没有模板类型
'vector' in namespace 'std' does not have a template type
所以,我的标题文件中有一个定义:
std::vector<char> showBytes(char const* fileName);
,当我尝试编译程序时,它会一直给我这个错误:
error: 'vector' in namespace 'std' does not name a template type
有任何线索为什么给我这个?
编辑:
#include <vector>
#include "file.h"
std::vector<char> showBytes(char const* fileName) {
std::ifstream ifs(fileName, std::ios::binary|std::ios::ate);
std::ifstream::pos_type pos = ifs.tellg();
std::vector<char> result(pos);
ifs.seekg(0, std::ios::beg);
ifs.read(&result[0], pos);
return result;
}
file.h
std::vector<char> showBytes(char const* fileName);
标头文件提供了其中声明的函数的接口。参数类型以及返回类型至少应在遇到时声明。默认情况下,不包括<vector>
(其中包含声明和定义(,也不会向前声明。这会导致您的函数的返回类型未知,因此编译器很难确定在返回值的堆栈上应保留多少空间。
通过在使用它的每个编译单元(C 文件(中加入<vector>
,该声明应在该编译单元中存在。但是,这很笨拙。但是,可以通过简单地包括在标题文件中来实现相同的结果,这样您就不依赖包含顺序。
file.h:
#ifndef FILE_H
#define FILE_H
#include <vector>
std::vector<char> showBytes(char const* fileName);
#endif // FILE_H
在另一个注意事项上,您可能还需要在file.cpp中包含 <fstream>
;它包含ifstream的声明。当前没有必要的后卫(也知道是标头后卫(,但是我添加了它,因为它可以为您节省一些麻烦。
相关文章:
- 使用模板类的自定义列表类型中的内存泄漏
- C++ - 检查结构数据类型中的单词是否为回文
- 为模板参数类型中的新对象分配内存
- 如何替换给定类型中的模板参数
- 交换未定义数据类型中的字节顺序
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- std::list 模板是否需要其实例类型中的复制构造函数(或等效项)?
- 如何访问PCLPORTCLOUD2类型中的点
- 为什么在.h中定义的私有结构需要.cpp文件中的返回类型中的范围
- 函数返回类型中的模板类型推断
- 尾随返回类型中的占位符类型的用途是什么
- Soci Clob数据类型中的Oracle C
- 访问lambda尾随返回类型中的概括捕获对象
- 返回对特定尺寸数组的引用,而无需明确说明返回类型中的大小
- 函数类型中的星号
- 为什么"char"结构类型中的编程实践不好?
- 类类型中的错误是c++中的异常
- 类类型中的访问器函数未从 C++ 中的私有数据返回正确的值