为什么重载 operator<< 来打印 Eigen class 成员会导致段错误?
Why does overloading operator<< to print Eigen class member result in a segfault?
对于以下结构
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;
}
这会导致段错误。谁能给我解释一下为什么?
一个最小的工作示例:
#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;
}
我正在 Ubuntu 18.04 上使用 g++ 7.3.0 版和 Eigen 3.4 版进行编译。
重载operator<<
的return值为std::ostream&
。但是,您没有return从中获取任何信息。
执行以下操作:
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;
}
这会导致段错误。谁能给我解释一下为什么?
一个最小的工作示例:
#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;
}
我正在 Ubuntu 18.04 上使用 g++ 7.3.0 版和 Eigen 3.4 版进行编译。
重载operator<<
的return值为std::ostream&
。但是,您没有return从中获取任何信息。
执行以下操作:
out << object.mat;
return out;
或者,
return out << object.mat;