【发布时间】:2011-01-24 16:50:33
【问题描述】:
我正在尝试在 c++ 中使用列表,但出现以下错误:
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;
};
包括.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
【问题讨论】:
-
对于它的价值,
safe_delete是一个糟糕的主意。它会掩盖代码中的逻辑问题。请改用智能指针(例如boost::scoped_ptr、boost::shared_ptr、boost::scoped_array或boost::shared_array)。 -
为什么还要麻烦安全删除中的
if(d)? -
@Per
safe_delete其实没用,删除空指针是安全的! -
更不用说在使用
safe_delete的给定实现时可能出现问题的所有标准“宏是邪恶的”方式:parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.4 -
重新安全删除,Stroustrup 建议这样做:
template<class T> inline void destroy(T*& p) { delete p; p = 0; }www2.research.att.com/~bs/bs_faq2.html#delete-zero