eigenを用いてcsvファイルを読み取り、出力するプログラムを勉強しています。
(VScodeで書いています。)
readCSVの結果(マトリクスres)をどうにか実行結果として出力したいのですが、うまくいかず…
最後のreadCSV.resに問題があると考えているのですが、正しい表記方法をお教え願いたいです。
c++初心者で、プログラミングも素人レベルです。
初歩的な質問で大変恐れ入りますが、ご助言のほどよろしくお願い申し上げます。
c++
1#include <string> 2#include <iostream> 3#include <fstream> 4#include "Eigen/Dense" 5#include "Eigen/Core" 6#include <vector> 7 8// 名前空間の書き方が揃えられておらず、表記が重なってる部分がありますが、ご容赦願います。 9using namespace std; 10using namespace Eigen; 11 12Eigen::MatrixXd readCSV(std::string file, int rows, int cols) { 13 14 std::ifstream in(file); 15 16 std::string line; 17 18 int row = 0; 19 int col = 0; 20 21 Eigen::MatrixXd res = Eigen::MatrixXd(rows, cols); 22 23 if (in.is_open()) { 24 25 while (std::getline(in, line)) { 26 27 char *ptr = (char *) line.c_str(); 28 int len = line.length(); 29 30 col = 0; 31 32 char *start = ptr; 33 for (int i = 0; i < len; i++) { 34 35 if (ptr[i] == ',') { 36 res(row, col++) = atof(start); 37 start = ptr + i + 1; 38 } 39 } 40 res(row, col) = atof(start); 41 42 row++; 43 } 44 45 in.close(); 46 } 47 //std::cout << res << std::endl; ここでは正しい値(出力したい値)が出力されます。 48 return res; 49} 50 51int main(){ 52 readCSV("test.csv",3,3); 53 std::cout << readCSV.res << "\n"; 54} 55 56//test.csvは 57//1,4,7, 58//2,5,8, 59//3,6,9 60//というシンプルなものです。
以下、実行時のエラーメッセージです。
011.cpp: In function ‘int main()’:
011.cpp:65:26: error: request for member ‘res’ in ‘readCSV’, which is of non-class type ‘Eigen::MatrixXd(std::__cxx11::string, int, int) {aka Eigen::Matrix<double, -1, -1>(std::__cxx11::basic_string<char>, int, int)}’
std::cout << readCSV.res << "\n";
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/08 06:57
2021/09/08 07:02
2021/09/08 07:17
2021/09/08 07:24 編集
2021/09/15 08:13