Почему перегрузка оператора << для вывода члена класса Eigen приводит к segfault? - PullRequest
0 голосов
/ 20 сентября 2018

Для следующей структуры

struct TestClass {
  TestClass() : mat(Eigen::Matrix3i::Zero()) {}
  Eigen::Matrix3i mat;
};

Я хотел бы иметь перегруженный operator<< для печати члена mat в std::cout.Я пытался

std::ostream& operator<<(std::ostream& out, const TestClass& object) {
    out << object.mat;
}

Это приводит к segfault.Может кто-нибудь объяснить мне, почему?

Минимальный рабочий пример:

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

Я компилирую с G ++ версии 7.3.0 и Eigen версии 3.4 на Ubuntu 18.04.

1 Ответ

0 голосов
/ 20 сентября 2018

Возвращаемое значение перегруженного operator<< равно std::ostream&.Однако вы ничего не возвращаете с него.

Выполните следующие действия:

out << object.mat;
return out;

или, альтернативно,

return out << object.mat;
...