ヘッダー ファイルはあまり得意ではありませんが、ヘッダー ファイルを使用してファイルからデータを読み取り、そのデータをメインの cpp ファイルのベクターとして返したいと考えています。
ここに私のreadposcar.hファイルがあります:
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int add(void) {
double a1x, a1y, a1z, a2x, a2y, a2z, a3x, a3y, a3z; // I want all this stuff in vector form
int i;
double scale;
string line; stringstream dum;
ifstream poscar ("POSCAR");
for (i=1; i<=5; i++) {
getline(poscar,line);
if (i==2) {stringstream dum(line); dum >> scale;}
if (i==3) {stringstream dum(line); dum >> a1x >> a1y >> a1z;}
if (i==4) {stringstream dum(line); dum >> a2x >> a2y >> a2z;}
if (i==5) {stringstream dum(line); dum >> a3x >> a3y >> a3z;}
}
vector<double> myvec(3);
myvec[0] = a1x;
myvec[1] = a1y;
myvec[2] = a1z;
return myvec;
}
ここに私の.cppファイルがあります:
#include <iostream>
#include <fstream>
#include "readposcar.h"
using namespace std;
int main(void) {
int nbasis = 2;
int nkpts = 10;
vector<double> myvec2(3);
myvec2 = add();
cout << "No. of k-points: " << nkpts << endl;
return 0;
}
これは明らかに機能しません。誰かが何が悪いのか、それを機能させるために何をする必要があるのか 教えてもらえますか? 配列全体ではなく、.h ファイルで myvec[2] と言う場合にのみ動作させることができます。
ベクトルが機能しない場合は、配列として使用してもかまいません。ヘッダー ファイル内の配列を一種のグローバル配列として初期化し、それを .cpp ファイル内で呼び出すことはおそらく可能でしょうか?
ここに私が得るエラーがあります:
main.cpp:4:0 からインクルードされたファイル:
readposcar.h: In function ‘int add()’:
readposcar.h:27:9: error: cannot convert ‘std::vector<double>’ to ‘int’ in return
main.cpp: In function ‘int main()’:
main.cpp:12:15: error: no match for ‘operator=’ in ‘myvec2 = add()’