我正在尝试在c ++中使用list,但是我收到以下错误:
1>错误C2143:语法错误:缺少';'在'<'
之前1>错误C4430:假定缺少类型说明符int。注意:C ++不支持default-int
1>错误C2238:';'
之前的意外标记
使用以下代码:
#pragma once
#include "Includes.h"
class Polygon
{
public:
Polygon(void);
~Polygon(void);
void addVertice(hgeVector v);
void renderPolygon();
list<hgeVector> vertices;
};
INCLUDES.H:
#ifndef INCLUDES
#define INCLUDES
#define safe_delete(d) if(d) { delete d; d=0; }
#define PI 3.14159
#include <stdio.h>
#include <list>
#include "\include\hge.h"
#include "\include\hgesprite.h"
#include "\include\hgefont.h"
#include "\include\hgeparticle.h"
#include "\include\hgerect.h"
#include "Car.h"
#include "HelperFunctions.h"
#include "config.h"
#include "Polygon.h"
using namespace std;
#endif
答案 0 :(得分:7)
只是一些一般性意见......
#define PI 3.14159
请使用M_PI
中的math.h
,即3.141592653589793238462643。
#include "\include\hge.h"
#include "\include\hgesprite.h"
#include "\include\hgefont.h"
#include "\include\hgeparticle.h"
#include "\include\hgerect.h"
您应在此处使用正斜杠/
,并在\
之前删除前导include
。
using namespace std;
在头文件中避免这种情况。这将污染所有其他用户的全局命名空间。 (因此,您应该在std::list<hgeVector> vertices;
中使用Polygon.h
。)
答案 1 :(得分:5)
问题可能是list<hgeVector> vertices
之前正在处理行using namespace std;
,因此您的编译器不知道list
是什么(没有std::
命名空间限定符)是。由于你的两个文件相互包含,我不清楚这些语句的确切顺序是什么,我不知道非标准#pragma once
将如何处理这个。
无论如何,请尝试将list<hgeVector>
定格为std::list<hgeVector>
编辑:假设#pragma once
就像包含警卫一样工作,如果其他文件包括h,则会出现此问题,但如果某些其他文件包含Polygon.h则不会出现此问题。如果另一个文件包含includes.h,那么includes.h到达#include <Polygon.h>
,编译器开始处理Polygon.h。但是当在Polygon.h中到达#include <includes.h>
时,由于已经定义了INCLUDES
保护,因此没有任何实际包含,所以在编译器继续处理之前你没有得到using namespace std;
行。其余的Polygons.h。
一般来说,尽量避免循环包含,并且更喜欢前向声明。
答案 2 :(得分:4)
我认为你有通告“包含”。您在Includes.h
中加入Polygon.h
,并在Polygon.h
中加入Includes.h
。
答案 3 :(得分:1)
类模板需要一个完整的类型声明来实例化它自己。确保已包含声明hgeVector的头文件。
顺便说一下,你的标题中有'使用命名空间标准' - 这不是一个好习惯。它会为当前命名空间引入不必要的名称。答案 4 :(得分:0)
确保hgeVector
已定义。
您可能已在某处重新定义了列表。尝试使用std::list
。
尝试非常简单的事情,例如std::list<int>
。
答案 5 :(得分:0)
在整理出我的包含后,我最终得到了这样的编译代码(即使没有std :: infront of list:
#pragma once
#include <list>
#include "D:\Programmering\haffes\hge181\include\hge.h"
#include "D:\Programmering\haffes\hge181\include\hgevector.h"
using namespace std;
using namespace std;
class MyPolygon
{
public:
MyPolygon(void);
~MyPolygon(void);
void addVertice(hgeVector v);
void renderPolygon();
void setHotSpot(hgeVector v);
void translate(hgeVector v);
private:
list<hgeVector> vertices;
hgeVector hotSpot;
bool hotSpotUndef;
};
感谢所有快速和好的答案!