C++ cygwin_异常::打开_stackdump文件:将堆栈跟踪转储到*.exe.stackdump

C++ cygwin_异常::打开_stackdump文件:将堆栈跟踪转储到*.exe.stackdump,c++,eclipse,stack-trace,eigen,C++,Eclipse,Stack Trace,Eigen,我收到“cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到TestProject.exe.stackdump”错误。我的项目不过是一个C++ HaloWord项目,它包含一个附加类,在其中我设置并获取变量。在我试图设置一个本征类型的矩阵变量时,我得到了这个错误。这是我的密码: TestProject.cpp #include <iostream> #include "TestClass.hpp" using namespace std; i

我收到“cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到TestProject.exe.stackdump”错误。我的项目不过是一个C++ HaloWord项目,它包含一个附加类,在其中我设置并获取变量。在我试图设置一个本征类型的矩阵变量时,我得到了这个错误。这是我的密码:

TestProject.cpp

#include <iostream>
#include "TestClass.hpp"

using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    TestClass testClass;
    Eigen::MatrixXd XX = testClass.getVariable();
    cout << "X = " << XX;
    return 0;
}
值得一提的是,当我将类变量X的类型(以及方法和头文件中的所有相关类型)更改为整数时,我没有得到这个错误,代码编译并运行

我将感谢任何帮助,因为我没有在网上找到有用的信息


谢谢

您使用的是动态大小的矩阵X,并且您尝试在不首先设置其大小的情况下对其进行逗号初始化。这将引发一个异常:

如前所述:

Eigen提供了一个逗号初始值设定项语法,允许用户 轻松设置矩阵、向量或数组的所有系数。简单地 列出系数,从左上角开始,从 从左到右,从上到下对象的大小 需要事先指定

以及:

系数必须按行的主要顺序提供,且准确无误 匹配矩阵的大小。否则将提出断言

因此,首先调整矩阵的大小:

TestClass::TestClass() {
    X.resize (1,3); 
    X << 0, 1, 2;
}
TestClass::TestClass(){
X.1(1,3);
X
#include "TestClass.hpp"

using namespace std;

TestClass::TestClass() {
    X << 0, 1, 2;

}

TestClass::~TestClass() {
    // TODO Auto-generated destructor stub
}

void TestClass::setVariable(Eigen::MatrixXd x){
    X = x;
}
 /* namespace std */

Eigen::MatrixXd TestClass::getVariable(){
    return X;
}
!!!Hello World!!!
      0 [main] TestProject 8416 cygwin_exception::open_stackdumpfile: Dumping stack trace to TestProject.exe.stackdump
TestClass::TestClass() {
    X.resize (1,3); 
    X << 0, 1, 2;
}