C++代码中的错误
编写代码是为了实现一个带有一些常用函数的Bit类C++代码中的错误,c++,oop,C++,Oop,编写代码是为了实现一个带有一些常用函数的Bit类 #include <iostream> #include <math.h> using namespace std; class Bit { int width; int value; public: Bit(int v, int w) { value=v; width=w; } Bi
#include <iostream>
#include <math.h>
using namespace std;
class Bit
{
int width;
int value;
public:
Bit(int v, int w)
{
value=v;
width=w;
}
Bit(const Bit& b)
{
value= b.value;
width= b.width;
}
int getWidth()
{
return width;
}
int getValue()
{
return value;
}
Bit plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return this;
}
};
如何删除错误?您的plus方法返回Bit*const。我想整个方法应该是
Bit& plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return *this;
}
方法plusint newval应返回*this;而不是这个。这就是错误所在。另外,Bit&reference类型的返回值更有意义。尽管您可能不需要返回对用于调用此方法的对象的引用,但请检查Mike的答案
还请注意,如果可以添加行号,或者只在函数失败时给出函数,那么pow2,width等于1就更好了。然而,这似乎是它停止的地方
Bit plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return this;
}
它将返回对更新对象的引用。当然,您也可以返回一点*,但我会尽量避免不必要地使用指针
Bit plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return this;
}
此方法返回一个位,但返回一个指向该位的指针。
您应该返回:
return*this,或者如果您决定返回它,那么方法签名应该是Bit*plusint newval这是一个指针,并且您的plus函数声明它返回一个值
您可能希望将返回类型更改为void,而不返回任何内容;我看不出有什么好的理由返回该对象的副本
也许您希望返回引用以链接调用:
Bit & plus(int newval) //< added &
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return *this; //< added *
}
如果你真的想这样做。如果我将构造函数更改为BitBit b{value=b.value;width=b.width;}会发生什么情况?为什么这里这个错误,但它在java中工作得很好。复制构造函数必须通过引用获取其参数;为了按值传递它,您需要复制构造函数来创建值-这是不可能的,因为这是复制构造函数。在Java中,参数是一个引用-您根本不能通过值传递类类型。在C++中,你必须声明它是引用,BIT Bistcon& B。但我想知道为什么我们需要指针?我听说这是一个指针,那么为什么我们需要添加另一个指针呢?我是C++新手,你能解释一下吗?@ RasmiRanjanNayak:你不添加另一个指针,你在取消现有的指针。
Bit& plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return *this;
}
Bit plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return this;
}
Bit & plus(int newval) //< added &
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return *this; //< added *
}
bit.plus(1).plus(3).plus(42);