Следующий основной файл должен передать VectorXi в мой класс под названием Test
, который затем метод, который делает что-то с ним (для демонстрации он просто печатает сумму всех элементов):Передачи VectorXi из собственной библиотеки методы класса
#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;
};
При компиляции с Xcode 6.1.1 на OS X 10.10.2 Я получаю сообщение об ошибке:
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++
в настройках проекта, но это не сработало. Я установил собственную библиотеку с помощью Homebrew через brew install eigen
. Почему он работает с методом, определенным в test.h (см. Комментарий), но не тогда, когда он определен в test.cpp?