错误 C2039:“向量”:不是“标准”的成员
Posted
技术标签:
【中文标题】错误 C2039:“向量”:不是“标准”的成员【英文标题】:ERROR C2039: 'vector': is not a member of 'std' 【发布时间】:2016-09-29 08:25:06 【问题描述】:我是 C++ 新手,我正在尝试制作一个小地牢爬行游戏。目前我在头文件中声明了多个向量,但它们似乎给出了多个错误。我曾尝试在 *** 上搜索此问题,但答案似乎并不奏效。
这是我的头文件之一:(Hero.h)
#pragma once
class Hero
public:
Hero();
std::string name;
int experience;
int neededExperience;
int health;
int strength;
int level;
int speed;
std::vector<Item> items = std::vector<Item>();
void levelUp();
private:
;
这是我的 .cpp 文件:(Hero.cpp)
#include "stdafx.h"
#include <vector>
#include "Hero.h"
#include "Item.h"
Hero::Hero()
void Hero::levelUp()
;
就像我说的我是 C++ 新手,所以我的代码可能比我知道的要多得多。这只是一个测试。
以下是 Visual Studio 2015 的错误列表中显示的错误:
Error C2039 'vector': is not a member of 'std' CPPAssessment hero.h 13
Error C2143 syntax error: missing ';' before '<' CPPAssessment hero.h 13
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CPPAssessment hero.h 13
Error C2238 unexpected token(s) preceding ';' hero.h 13
【问题讨论】:
【参考方案1】:在您的 Hero.h 标头中包含 <vector>
,并考虑将其从您的 Hero.cpp 文件中删除,如下面的 cmets 所述。
【讨论】:
不太确定这个答案。在 cpp 文件中,vector 包含在 hero.h 之前,所以应该没问题。您提出的建议是很好的建议,但根据 OP 的信息,这里不会有问题。话虽如此,这种错误几乎总是由缺少标头引起的,因此可能是 OP 的信息不正确。 @paxdiablo 是的。我要删除这个答案。 @paxdiablo 我们不知道。如果 stdafx.h 包含 hero.h,我不会感到惊讶,导致它在向量之前被解析。 stdafx.h 不包括 hero.h 作为一般规则,始终使相应的头文件成为您包含在 cpp 文件中的 first 头文件(除了预编译的头文件,如果您正在使用它们)。这样,当头文件不包含它需要的所有头文件时,您可以确保收到这样的错误。【参考方案2】:std::vector<Item> items = std::vector<Item>();
声明了一个完整类型。
因此编译器此时需要知道std::vector
的声明(除其他外,还需要建立编译时可评估常量sizeof Hero
)。解决方法是#include <vector>
在标头hero.h
,不是源文件。
【讨论】:
【参考方案3】://.h
template<class _Ty>
class std::allocator;
template<class _Ty, class _Alloc = std::allocator<_Ty> >
class std::vector;
//this line in .cpp file. Put it before custom header files.
#include<vector>
在 2017 年对比测试。 这样,您的自定义头文件中不会包含任何头文件。 但不知道为什么堆栈的保存方式不起作用。
更多信息,https://github.com/YagaoDirac/snippet-set-for-cpp。还有一个不和谐的链接。
【讨论】:
以上是关于错误 C2039:“向量”:不是“标准”的成员的主要内容,如果未能解决你的问题,请参考以下文章
错误:C2039:“指针”:不是“QJsonObject::iterator”的成员
错误 C2039:“会话”:不是“pjsua_call”的成员
Visual Studio 2008,错误 c2039:“set_new_handler”:不是“std”的成员
qt 错误 多继承 造成错误:error C2039: “qt_metacall“: 不是 “xxxxxx“ 的成员