C++ 函数的奇怪行为

C++ 函数的奇怪行为,c++,overloading,C++,Overloading,基本上我有一个重载函数来计算范数: double Szabo::norme(Gaussienne gaussienne, Atome atome) { return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2)); } double Szabo::norme(Gaussienne gaussienneA, Gaussienne

基本上我有一个重载函数来计算范数:

double Szabo::norme(Gaussienne gaussienne, Atome atome) {
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2));
}

double Szabo::norme(Gaussienne gaussienneA, Gaussienne gaussienneB)
{
    return sqrt(pow(gaussienneA.GetX()-gaussienneB.GetX(),2.0) + pow(gaussienneA.GetY()-gaussienneB.GetY(),2.0) + pow(gaussienneA.GetZ()-gaussienneB.GetZ(),2.0));
}
Gaussienne和Atome(类和结构)的定义如下:

环礁:

struct Atome
{
    double x; double y; double z; double numeroAtomique;
};
高斯安:

#ifndef GaussienneHeader
class Gaussienne
{       
    protected:
        // attributs
        double alpha;
        double coordX,coordY,coordZ;
    public:
        // methodes:

            // Constructeurs:
            Gaussienne();
            Gaussienne(double alpha,double x, double y, double z);

            // Accesseurs:
            double GetAlpha() const; //return this->alpha
            double GetX() const; //return this coordX
            double GetY() const; // return this coordY
            double GetZ() const; // return this coordZ

};

#define GaussienneHeader
#endif
现在,我想计算2高斯A和B的中心和位于(0,0,0)的原子之间的范数

我创建了一个像这样的“占位符”来存储上一个对象的中心坐标

Gaussienne gaussienneP(0,(gaussienneA.GetX()+gaussienneB.GetX())/2.0,(gaussienneA.GetY()+gaussienneB.GetY())/2.0,(gaussienneA.GetZ()+gaussienneB.GetZ())/2.0);
当我称之为:

Szabo::norme(mygaussian,atome)
我得到的结果与调用此时不同:

/* using this constructor: Gaussienne(double alpha,double x, double y, double z) with a dummy alpha = 0; */
Szabo::norme(mygaussian,Gaussienne(0,atome.x,atome.y,atome.z)
幸运的是,我可以将我的结果与一些“canon”程序进行比较,因此我知道两个高斯函数的norme函数返回的结果很好,而另一个则不是


有人能给我解释一下这种奇怪的行为吗?谢谢

我想错误在这里:

double Szabo::norme(Gaussienne gaussienne, Atome atome) {
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2));
}
y分量使用两次,应为:

double Szabo::norme(Gaussienne gaussienne, Atome atome) {
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetZ()-atome.z,2));
}

我真傻,谢谢兄弟。我不应该在午夜做这件事;)@这就是为什么要写一个
位置
类型,在上面定义
运算符-
,以及
长度_平方
长度
和标量除法/乘法。然后在其他逻辑的中间测试并停止写CORD特定的东西。因为错误很容易。