将特征库中的 VectorXi 传递给 class 方法
Passing a VectorXi from eigen library to class method
下面的主文件应该将一个 VectorXi 传递给我的 class,称为 Test
,然后有一个方法可以用它做一些事情(为了演示,它只打印所有元素的总和):
#include <iostream>
#include <eigen3/Eigen/Dense>
#include "test.h"
using namespace std;
using namespace Eigen;
int main(int argc, const char * argv[]) {
VectorXi m(3);
m[0] = 1;
m[1] = 2;
m[2] = 6;
Test test;
test.mySum(m);
return 0;
}
test.h
#ifndef __CPP_Playground__test__
#define __CPP_Playground__test__
#include <iostream>
#include <eigen3/Eigen/Dense>
using namespace std;
using namespace Eigen;
class Test {
public:
void mySum(VectorXi vec); // Does not work.
// void mySum(VectorXi vec){cout << vec.sum() << endl;}; // Works.
};
#endif /* defined(__CPP_Playground__test__) */
和test.cpp
#include "test.h"
void mySum(VectorXi vec){
cout << vec.sum() << endl;
};
在 OS X 10.10.2 上使用 Xcode 6.1.1 编译时,我收到错误消息:
Undefined symbols for architecture x86_64:
"Test::mySum(Eigen::Matrix<int, -1, 1, 0, -1, 1>)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
我尝试在项目设置下使用 libstdc++
而不是 libc++
但它没有用。我通过 brew install eigen
使用 Homebrew 安装了 eigen 库。为什么它使用直接在 test.h 中定义的方法(见注释行)而不是在 test.cpp 中定义的方法?
这与Eigen无关,你只是在cpp文件中省略了class前缀Test::
:
void Test::mySum(VectorXi vec){
cout << vec.sum() << endl;
}
此外,在适当的 C++ 中不需要尾随 ;
,您应该通过引用将参数声明为 VectorXi &vec
来传递 vec
对象,或者更好地使用 Eigen::Ref<VectorXi> vec
允许通过引用传递兼容的对象。
下面的主文件应该将一个 VectorXi 传递给我的 class,称为 Test
,然后有一个方法可以用它做一些事情(为了演示,它只打印所有元素的总和):
#include <iostream>
#include <eigen3/Eigen/Dense>
#include "test.h"
using namespace std;
using namespace Eigen;
int main(int argc, const char * argv[]) {
VectorXi m(3);
m[0] = 1;
m[1] = 2;
m[2] = 6;
Test test;
test.mySum(m);
return 0;
}
test.h
#ifndef __CPP_Playground__test__
#define __CPP_Playground__test__
#include <iostream>
#include <eigen3/Eigen/Dense>
using namespace std;
using namespace Eigen;
class Test {
public:
void mySum(VectorXi vec); // Does not work.
// void mySum(VectorXi vec){cout << vec.sum() << endl;}; // Works.
};
#endif /* defined(__CPP_Playground__test__) */
和test.cpp
#include "test.h"
void mySum(VectorXi vec){
cout << vec.sum() << endl;
};
在 OS X 10.10.2 上使用 Xcode 6.1.1 编译时,我收到错误消息:
Undefined symbols for architecture x86_64:
"Test::mySum(Eigen::Matrix<int, -1, 1, 0, -1, 1>)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
我尝试在项目设置下使用 libstdc++
而不是 libc++
但它没有用。我通过 brew install eigen
使用 Homebrew 安装了 eigen 库。为什么它使用直接在 test.h 中定义的方法(见注释行)而不是在 test.cpp 中定义的方法?
这与Eigen无关,你只是在cpp文件中省略了class前缀Test::
:
void Test::mySum(VectorXi vec){
cout << vec.sum() << endl;
}
此外,在适当的 C++ 中不需要尾随 ;
,您应该通过引用将参数声明为 VectorXi &vec
来传递 vec
对象,或者更好地使用 Eigen::Ref<VectorXi> vec
允许通过引用传递兼容的对象。