C++代码中的错误

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

编写代码是为了实现一个带有一些常用函数的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;
        }
        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);