For the following struct
struct TestClass {
TestClass() : mat(Eigen::Matrix3i::Zero()) {}
Eigen::Matrix3i mat;
};
I would like to have an overloaded operator<<
to print the mat
member to std::cout
. I tried
std::ostream& operator<<(std::ostream& out, const TestClass& object) {
out << object.mat;
}
This results in a segfault. Can anyone explain to me why?
A minimum working example:
#include <iostream>
#include <Eigen/Core>
struct TestClass {
TestClass() : mat(Eigen::Matrix3i::Zero()) {}
Eigen::Matrix3i mat;
};
std::ostream& operator<<(std::ostream& out, const TestClass& object) {
out << object.mat;
}
int main() {
TestClass testObject;
std::cout << testObject.mat << "\n\n"; // This works fine.
std::cout << testObject << '\n'; // This results in a segfault.
return 0;
}
I'm compiling with g++ version 7.3.0 and Eigen version 3.4 on Ubuntu 18.04.
The overloaded operator must have at least one operands of the user-defined types. You cannot overload an operator working on fundamental types.
In the statement “ cin >> head; “, cin is the first parameter and a reference to the head is the second parameter for the function. The above function is called when any such statement is executed. Overloading the ostream operator '<<': C++
Dot (.) operator can't be overloaded, so it will generate an error.
The return value of the overloaded operator<<
is std::ostream&
. However, you are not returning anything from it.
Do the following:
out << object.mat;
return out;
or alternatively,
return out << object.mat;
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