C++ 为什么不是';我的变异函数没有设置什么吗?还是我的构造器?

C++ 为什么不是';我的变异函数没有设置什么吗?还是我的构造器?,c++,getter-setter,C++,Getter Setter,我试图做一个相当基本的程序,但我得到了一些非常不一致的输出。特别是setter似乎没有设置值,尽管当我以不应该改变输出的方式处理参数变量时,有时会得到工作结果 这是我的密码: point.cpp 主要 我真的很困惑,因为本质上相同的函数在其他类似的基本程序中工作。如果有人能指出我犯了什么明显的错误,我们将不胜感激。让我们检查一个构造函数,尽管问题在任何地方都是一样的 point(double x, double y) { x = x; y = y; } x指的是参数。因此,您正

我试图做一个相当基本的程序,但我得到了一些非常不一致的输出。特别是setter似乎没有设置值,尽管当我以不应该改变输出的方式处理参数变量时,有时会得到工作结果

这是我的密码:

point.cpp 主要
我真的很困惑,因为本质上相同的函数在其他类似的基本程序中工作。如果有人能指出我犯了什么明显的错误,我们将不胜感激。

让我们检查一个构造函数,尽管问题在任何地方都是一样的

point(double x, double y)
{
    x = x;
    y = y;
}
x
指的是参数。因此,您正在将参数分配给自身。两个半解决方案是可能的:

  • 为成员和参数使用不同的名称
  • this
    显式命名成员,即
    this->x=x
  • 只给指挥官。使用成员初始值设定项列表,
    点(双x,双y):x(x),y(y){}
    。这里有一些关于初始化器内外引用的
    x
    的特殊规则。我建议您使用成员初始值设定项列表,即使您采用了前面的解决方案之一。它更为地道的C++。
    正如其他人已经指出的那样,问题在于您的成员变量与参数具有相同的名称

    看看这个方法本身。它是完整的,并将
    x
    分配给自身

    void set_x(double x)
    {
        x = x;
    }
    
    在代码中,此
    double x
    隐藏外部(从函数的角度)变量
    x

    我建议您在成员变量前面加上
    m
    m
    (m代表成员)。 这将产生唯一的名称,并帮助您区分和防止此类问题

    void set_x(double x)
    {
        m_x = x;
    }
    
    现在您可以看到参数
    x
    被分配给成员变量
    mux

    或者,您也可以通过如下方式使用this指针引用具有相同名称的成员:

    void set_x(double x)
    {
        this->x = x;
    }
    

    因为您的函数参数隐藏了成员变量(大多数编译器都会警告您这一点),所以可以使用
    this->x
    etc或重命名函数参数。此外,对于构造函数,您应该使用成员初始值设定项列表:将参数名称更改为px,py我已经尝试更改参数名称,但仍然得到相同的输出。我个人非常喜欢在成员变量前面加上“m”或“m”。便于区分成员和参数。在本例中,“int mX;”或“int m_x;”@p.chives仅供参考,您跳过了诸如
    class point
    main
    的实际声明等代码。你应该避免自我编辑,因为可能是你遗漏了什么导致了问题。此外,如果您在这里显示可以编译的代码,而不必猜测丢失了什么,那么人们就更容易验证您的结果。谢谢你的提示,从现在起我将使用会员初始化器。然而不幸的是,即使选择1,我仍然得到同样的结果。如果这只是定义的问题,那么它现在应该可以工作了,对吗?@p.chives-您确定在进行这些更改后重新生成了可执行文件吗?就我而言,当名称不同时,我无法复制您的问题。此外,如果你打算在上发表意见,你应该知道,以完全使现有答案无效的方式更改答案是很糟糕的netiquette。@p.chives请注意,有时你甚至被迫使用初始化列表,例如。G对于引用类型的成员变量、常量成员或没有赋值运算符的类型(即,没有显式的成员变量,并且删除了默认的成员变量)…@StoryTeller我刚刚重新构建了它,现在它可以正常工作了。我想我的编译器有问题,因为自从它开始工作以来,我没有更改任何内容。@p.chives-因为这是一个简单的错误,我将您对问题的更改回滚。答案应该与原来的问题相符。
    void set_x(double x)
    {
        x = x;
    }
    
    void set_x(double x)
    {
        m_x = x;
    }
    
    void set_x(double x)
    {
        this->x = x;
    }