Ответ 1
Возвращаемое значение перегруженного operator<<
- это std::ostream&
. Однако вы ничего не возвращаете.
Выполните следующие действия:
out << object.mat;
return out;
или, альтернативно,
return out << object.mat;
Для следующей структуры
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.
Возвращаемое значение перегруженного operator<<
- это std::ostream&
. Однако вы ничего не возвращаете.
Выполните следующие действия:
out << object.mat;
return out;
или, альтернативно,
return out << object.mat;