簡體   English   中英

為什么重載operator <<打印特征類成員導致段錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM