C++类调用函数出错,调试很久了,分数不够再加

djsklafjsdakjfkdlsj 2009-03-24 03:52:11
我建立的是一个square的Win32 Application,然后在头文件里加入了Intersect.h,在源文件里加入Intersect.cpp,然后在square.cpp中调用

Vector3 near(nearposX,nearposY,nearposZ);
Vector3 far(farposX+1,farposY+1,farposZ+1);
G_SkyIntersect skyIntersect;
if(skyIntersect.GetIntersectObj(near,far,pArrayABCD,4))
cout<<" 碰撞了" <<endl;出错。
错误提示:

错误1 error C2143: 语法错误 : 缺少“)”(在“,”的前面
错误2 error C2660:“G_SkyIntersect::GetIntersectObj”: 函数不接受 0 个参数
错误3 error C2059: 语法错误 : “,”
错误4 error C2059: 语法错误 : “)”
代码:我肯定类Vector3的代码没错,所以相干的代码没有列出...
//Intersect.h
class G_SkyIntersect
{
private:
Vector3 CalculateFaceNormal(Vector3 a,Vector3 b,Vector3 c);
bool FindIntersect( const Vector3 &LineStart,
const Vector3 &LineEnd,
const Vector3 &triangle_a,
const Vector3 &triangle_b,
const Vector3 &triangle_c,
Vector3 &IntersectP);

public:
//G_SkyIntersect();
//~G_SkyIntersect();
bool GetIntersectObj(const Vector3& LineStart,const Vector3& LineEnd,
const float **pArray[],
const unsigned long numFaces);
};

//Intersect.cpp
bool G_SkyIntersect::GetIntersectObj( const Vector3& LineStart, const Vector3& LineEnd,
const float **pArray[], const unsigned long numFaces)
{
unsigned long i=0;
Vector3 Line_Start,Line_End;
//---三角形的三个顶点值
Vector3 triangle_a,triangle_b,triangle_c;
//---碰撞点
Vector3 IntersectP;
Line_Start.x = LineStart.x; Line_End.x = LineEnd.x;
Line_Start.y = LineStart.y; Line_End.y = LineEnd.y;
Line_Start.z = LineStart.z; Line_End.z = LineEnd.z;

for(i=0;i<numFaces;i++)
{
triangle_a.x = pArray[i][0][0];
triangle_a.y = pArray[i][0][1];
triangle_a.z = pArray[i][0][2];

triangle_b.x = pArray[i][1][0];
triangle_b.y = pArray[i][1][1];
triangle_b.z = pArray[i][1][2];

triangle_c.x = pArray[i][2][0];
triangle_c.y = pArray[i][2][1];
triangle_c.z = pArray[i][2][2];

if(FindIntersect(Line_Start,Line_End,
triangle_a,triangle_b,triangle_c,
IntersectP))
return true;
}
return false;
}

bool G_SkyIntersect::FindIntersect(
const Vector3 &LineStart,
const Vector3 &LineEnd,
const Vector3 &triangle_a,
const Vector3 &triangle_b,
const Vector3 &triangle_c,
Vector3 &IntersectP)
{
//=================================
// 计算是否有相交
//=================================

//---计算三角形的面法线,用它来进行相交判断
Vector3 FaceNormal = CalculateFaceNormal(triangle_a,triangle_b,triangle_c);

//---计算运动路线方向(就是一个时间段内的速度)
Vector3 SportDirection = LineEnd;
SportDirection = SportDirection - LineStart;

//---计算运动路线方向和面法线的点积
float SportLine = SportDirection.Dot(FaceNormal);
if(SportLine < 0.000001f && SportLine > -0.000001f)
return false;

//---计算开始点与平面相交点(任取三角形一个顶点)方向
Vector3 IntersectDirection = triangle_a;
IntersectDirection = IntersectDirection - LineStart;

//---计算相交路线的点积
float IntersectLine = FaceNormal.Dot(IntersectDirection);

//---计算相交路线与运动路线的百分比
float Percentage = IntersectLine / SportLine;

//---判断运动线方向是否不可能和平面相交
//---运动线开始点比结束点离平面(垂直状态)近的时候
//---就像两个跑步运动员一个跑了一百米一个还在起跑线
if(Percentage < -0.000001f)
return false;

//---判断相交路线是否比运动路线长
if(Percentage > 1.f)
return false;

//---计算平面与运动路线的交点位置

IntersectP = SportDirection * Percentage;
IntersectP = IntersectP + LineStart;

//-------------------------------------

//=================================
// 计算平面内的三角形和点相交
//=================================

//---审请得到
Vector3 *Lines = new Vector3[3];
Lines[0] = IntersectP - triangle_a;
Lines[1] = IntersectP - triangle_b;
Lines[2] = IntersectP - triangle_c;

//---归一运算,在矢量来说叫“单位矢量”
Lines[0].Normalize();
Lines[1].Normalize();
Lines[2].Normalize();

//---计算总角度
float TotalAngles = 0.0f;
TotalAngles += acosf( Lines[0].Dot(Lines[1]) );
TotalAngles += acosf( Lines[1].Dot(Lines[2]) );
TotalAngles += acosf( Lines[2].Dot(Lines[0]) );

//---释放单位矢量
delete []Lines;

//---判断是否发生碰撞
if(TotalAngles < -6.50f) return false;

//--- lets take 6.28 radians(360 degrees) away from total_angles and
//--- if its Zero (with tolerence) weve hit it
//---假设拿 6.28 弧度( 360 度)取总角度如果它为 0 (用0.01)则碰撞发生
if(fabs(TotalAngles - 6.28f) < 0.01f)
return true;

return false;
}
Vector3 G_SkyIntersect::CalculateFaceNormal(Vector3 a,Vector3 b,Vector3 c)
{
//---计算三角形面法线,用两条边计算得到叉积,即面法线
Vector3 edge1,edge2,normal;
edge1 = b - a;
edge2 = c - a;
return edge1.Cross(edge2);
}
...全文
246 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj_vbplayer 2009-03-25
  • 打赏
  • 举报
回复
把括号重新打一遍把
fairchild811 2009-03-24
  • 打赏
  • 举报
回复
错误是不接受0个参数,但是没看出来怎么会出这个错误。
  • 打赏
  • 举报
回复
补充:pArrayABCD定义
GLfloat
PointA[] = { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},
PointB[] = {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},
PointC[] = { 0.0f, -sqrt(6.0f)/12, sqrt(3.0f)/3},
PointD[] = { 0.0f, sqrt(6.0f)/4, 0};

GLfloat *pArrayABC[] = {PointA,PointB,PointC};
GLfloat *pArrayACD[] = {PointA,PointC,PointD};
GLfloat *pArrayCBD[] = {PointC,PointB,PointD};
GLfloat *pArrayBAD[] = {PointB,PointA,PointD};

GLfloat **pArrayABCD[] = {pArrayABC,pArrayACD,pArrayCBD,pArrayBAD};
icecools 2009-03-24
  • 打赏
  • 举报
回复
那就看看这个几个参数near,far,pArrayABCD的定义是不是有问题?
  • 打赏
  • 举报
回复
这一行G_SkyIntersect skyIntersect; 没有没有错啊,我把
if(skyIntersect.GetIntersectObj(near,far,pArrayABCD,4))
这一行注释掉后就没有提示错误了
lbjfeng 2009-03-24
  • 打赏
  • 举报
回复
分还真不够,呵呵
icecools 2009-03-24
  • 打赏
  • 举报
回复
这种错误可能在前一行
你看看G_SkyIntersect声明是不是要加参数啥的。。。
  • 打赏
  • 举报
回复
补充:错误行就是在这一行:if(skyIntersect.GetIntersectObj(near,far,pArrayABCD,4))
蜥蜴枪王 2009-03-24
  • 打赏
  • 举报
回复
友情帮顶。。。
huojicha 2009-03-24
  • 打赏
  • 举报
回复
错误2 error C2660:“G_SkyIntersect::GetIntersectObj”: 函数不接受 0 个参数
表明你这句 if(skyIntersect.GetIntersectObj(near,far,pArrayABCD,4))
有问题,因为他显示你输入的参数是0个参数,而你输入了四个参数,所以中间什么问题,我就不知道了.建议像楼上说的检查下全角半角括号
downmooner 2009-03-24
  • 打赏
  • 举报
回复
不会是你某个符号全角半角写错了吧
BenjaminHuang 2009-03-24
  • 打赏
  • 举报
回复
怎么不把行号和出错信息对应上?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧