我的跨产品代码有什么问题

时间:2014-04-01 22:45:03

标签: c++ pointers

我是C ++初学者。我想得到一个表面的法向量,它由三点a,b和c确定。我有以下代码,但我不知道它有什么问题。谢谢您的帮助。

#include <iostream>
using namespace std;

class point
{
public:
 double x,y,z;
}; 

class crproduct:point 
{
public:
    double x1,x2,x3,y1,y2,y3,z1,z2,z3,Ax,Ay,Az,Bx,By,Bz;

    point crproduc(point *a,point *b,point *c) 
    {            
        //point a
        x1 = (*a).x;
        y1 = (*a).y;
        z1 = (*a).z;

        //point b
        x2 = (*b).x;
        y2 = (*b).y;
        z2 = (*b).z;

        //point c
        x3 = (*c).x;
        y3 = (*c).y;
        z3 = (*c).z;

        //Vector A
        Ax = x1-x2;
        Ay = y1-y2;
        Az = z1-z2;

        //vector B
        Bx = x2-x3;
        By = y2-y3;
        Bz = z2-z3;

        //cross product
        point vector;
        vector.x = (Ay*Bz)-(By*Az);
        vector.y = -(Ax*Bz)+(Bx*Az);
        vector.z = (Ax*By)-(Ay*Bx);
        return vector;
    }
};


int main () 
{
    point  *pp, *p1, *p2;
    point cd;
    crproduct cr1,cr2,cr3,cr4;
    (*pp).x = 12;
    (*pp).y = 13;
    (*pp).z = 15

    (*p1).x = 10;
    (*p1).y = 10;
    (*p1).z = 10;

    (*p2).x = 8;
    (*p2).y = 5;
    (*p2).z = 2;

    cd = cr1.crproduc(pp,p1,p2);
    cout << cd.x << " " << cd.y << " " << cd.z << endl;
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

这是不正确的:

 point  *pp,*p1,*p2;
 point cd;
 crproduct cr1,cr2,cr3,cr4;
 (*pp).x=12;
 (*pp).y=13;
 (*pp).z=15

 (*p1).x=10;
 (*p1).y=10;
 (*p1).z=10;

 (*p2).x=8;
 (*p2).y=5;
 (*p2).z=2;

除了缺少分号外,point *pp,*p1,*p2行建立了三个类型指针。它不会创建任何对象或实例化指针。所以在这一点上,使用指针会产生不确定的结果。

然后继续访问指针。

如果你想要它们在堆栈上,只需将对象直接声明为:

point pp, p1, p2;

...然后适当地访问。如果你需要它们在堆上,那么你应该使用new来创建指针可以指向的对象,例如。

pp = new point;

以后不要忘记delete