为什么重载operator <<打印特征类成员导致段错误?

red*_*red 11 c++ cout member eigen

对于以下结构

struct TestClass {
  TestClass() : mat(Eigen::Matrix3i::Zero()) {}
  Eigen::Matrix3i mat;
};
Run Code Online (Sandbox Code Playgroud)

我想有一个重载operator<<打印mat成员std::cout.我试过了

std::ostream& operator<<(std::ostream& out, const TestClass& object) {
    out << object.mat;
}
Run Code Online (Sandbox Code Playgroud)

这导致了段错误.任何人都可以向我解释原因吗?

一个最小的工作示例:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Ubuntu 18.04上的g ++版本7.3.0和Eigen版本3.4进行编译.

P.W*_*P.W 14

重载的返回值operator<<std::ostream&.但是,你没有从它返回任何东西.

请执行下列操作:

out << object.mat;
return out;
Run Code Online (Sandbox Code Playgroud)

或者,

return out << object.mat;
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`退出<< object.mat;` (2认同)