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