[英]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<<
的返回值是std::ostream&
。 但是,你沒有從它返回任何東西。
請執行下列操作:
out << object.mat;
return out;
或者,
return out << object.mat;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.