I have a class with an overloaded operator:
IPAddress& IPAddress::operator=(IPAddress &other) {
if (this != &other) {
delete data;
this->init(other.getVersion());
other.toArray(this->data);
}
return *this;
}
When I try to compile this:
IPAddress x;
x = IPAddress(IPV4, "192.168.2.10");
I get the following error:
main.cc: In function ‘int main()’:
main.cc:43:39: error: no match for ‘operator=’ in ‘x = IPAddress(4, ((const std::string&)(& std::basic_string<char>(((const char*)"192.168.2.10"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>())))))))’
IPAddress.h:28:20: note: candidate is: IPAddress& IPAddress::operator=(IPAddress&)
However, these two work fine (though they don't serve me any purpose):
IPAddress x;
IPAddress(IPV4, "192.168.2.10") = x;
-
IPAddress x;
x = *(new IPAddress(IPV4, "192.168.2.10"));
What's going on? Am I assuming something incorrect about the way the assignment operator works?
The right side of the assignment operator should take a const IPAddress&
.
Temporary objects can be bound to const references, but not to non-const references. This is why x = IPAddress(IPV4, "192.168.2.10");
doesn't work.
IPAddress(IPV4, "192.168.2.10") = x;
works because it is legal to invoke member functions on temporary objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With