我正在尝试初始化 Eigen 的 sparseMatrix,但是当初始化在类描述中时它不起作用。在函数中而不是在类中初始化的情况下,它有效。 我正在用 C++ 编写代码并使用 Visual Studio 2017。 我加了 民众: EIGEN_MAKE_ALIGNED_OPERATOR_NEW ,但问题依旧。
#include <iostream>
#include <vector>
#include <Eigen/SparseCore>
#include <Eigen/Sparse>
#include "pch.h"
using namespace Eigen;
namespace A {
class A
{
std::size_t max_doc_id = 4;
std::size_t max_term_id = 4;
SparseMatrix<float, Eigen::RowMajor, int64_t> smat(max_term_id, max_doc_id);
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
我想决定smat matrix (col=4, row=4) 的大小,但是报错信息是这样的(实际上是日文写的所以可能不正确) “成员 A::A::max_term_id 不是类型的名称。” 如果你能帮助我,我将不胜感激。
最佳答案
编译器认为您声明的是成员函数而不是成员变量(有关初始化的更多信息,请参阅 here)。下面编译。我正在使用 Index
而不是 size_t
来消除一些警告(缩小转换)。您可以在此处使用代码:https://godbolt.org/z/yV1NUL
#include <iostream>
#include <vector>
#include <Eigen/SparseCore>
#include <Eigen/Sparse>
using namespace Eigen;
namespace A {
class A
{
Index max_doc_id = 4;
Index max_term_id = 4;
SparseMatrix<float, Eigen::RowMajor, int64_t> smat{max_term_id, max_doc_id};
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
}
注意:您不应该在头文件中使用using namespace
,参见"using namespace" in c++ headers
编辑:另请考虑用户@ggael 在评论中所说的内容,很可能您不需要EIGEN_MAKE_ALIGNED_OPERATOR_NEW
,因为SparseMatrix
不是fixed-size vectorizable
关于c++ - 如何在类中初始化Eigen的SparseMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543699/