Why does overloading operator<< to print Eigen class member result in a segfault?

  • A+
Category:Languages

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 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; 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: