为什么bool
演员被称为?
调用构造函数Set result(*this)
时出现问题。我希望它使用复制构造函数,而是将*this
强制转换为bool
并将其用作构造函数的int
。
如何修复它以使用复制构造函数?
Set Set::operator+(const Set& rhs)const
{
Set result(*this);
for (unsigned int i = 0; i < rhs.getSize(); i++)
{
result.add(rhs[i]);
}
return result;
}
Set::operator bool()const
{
return !!(*this);
}
Set::Set(size_t capacity)
{
data = new int[capacity];
size = 0;
this->capacity = capacity;
}
void Set::copy(const Set& copied)
{
size = copied.getSize();
capacity = copied.getCapacity();
if (data != nullptr)
delete[]data;
data = new int[capacity];
for (unsigned int i = 0; i < size; i++)
data[i] = copied.getAt(i);
}
Set::Set(Set& copied)
{
copy(copied);
}
Set& Set::operator=(const Set& copied)
{
if (this != &copied)
copy(copied);
return *this;
}
int& Set::getAt(unsigned int idx)const
{
if (idx < 0 || idx >= size)
throw "Invalid index\n";
return data[idx];
}
bool Set::operator !()const
{
if (size == 0)
return true;
return false;
}
答案 0 :(得分:5)
复制构造函数Set::Set(Set& copied)
的参数不是const
引用。运算符Set Set::operator+(const Set& rhs)const
是const
,因此this
是const Set *
,而*this
是const Set
。由于您无法将const T
传递给T&
参数(它将丢弃const
),因此您可能无法在这种情况下使用复制构造函数。
要解决此问题,请让您的副本构造函数接受const Set &
,就像copy
成员函数那样:
Set::Set(const Set& copied)
// ^^^^^ Added const here
{
copy(copied);
}
Edit:强制性的免责声明,您不必编写自己的动态大小的数组。请改用std::vector
。它将大大简化您的类型,并且可能会更加安全。
答案 1 :(得分:1)
您可以声明显式转换运算符,以避免隐式转换为bool:
$ chmod 400 ~/anaconda3/KeyPair.pem
$ scp -r -i KeyPair.pem ubuntu@ec2-22-345-22-55.compute-1.amazonaws.com:anaconda3/Data/. D:/Data
然后像这样使用它:
explicit operator bool() const {
...
}