尝试在C ++中使用列表时编译错误

时间:2010-03-07 15:24:57

标签: c++ list

我正在尝试在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

6 个答案:

答案 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)

答案(正如Tyler McHenry指出的那样)是循环包含!

在整理出我的包含后,我最终得到了这样的编译代码(即使没有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;
};

感谢所有快速和好的答案!