>> 双精度数组的运算符?
>> operator on array of doubles?
将数据输入数组时出现问题。
我正在使用 Dev C++ 执行和编译。下面是我的代码,问题所在:
for (int k=0;k<=149;k++){ // k - scanning through Y within single file #i
for (int l=0;l<=199;l++){ // l - scanning through X within single file #i
inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];
Z
没有缺少下标,它本来就是这样的。
完整的错误代码。:
[Error] no match for 'operator>>' (operand types are
'std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}' and 'double [2]')
欢迎任何建议谢谢。
完整代码:
#pragma warning(disable:4786)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
using namespace std;
string filename(int filenumber);
int main () {
char *flnmptr;
string str,tmpr;
char flnm[50];
!!! make sure that the array dimensions for input data are right - that might screw the output files
dimensions are written in the 2nd header line of the input file
double X[150], Y[200], Z[2], Mx[150][200][2], My[150][200][2], Mz[100][100][2], time; // data from file
// double hX[5001], vY[5001], hMx[5001],hMy[5001],hMz[5001], vMx[5001], vMy[5001], vMz[5001]; // data to be written to file
//int xcnt, ycnt; // variable to count how many values will be written to a file
const int N=600; //number of files
//const int ptN=20; // number of points in the line
const double timestep=1e-14; // time step of files
const double X0=2.749313e-1; // X coordinate of line to read into vertical stripe output
const double Y0=-9.614638e-1; // Y coordinate of line to read into horizontal stripe output
ofstream outp("SWstripeCoupledCorner50difference10_120GHz.txt"); //opening output file
if (!outp){
cout << "Can't open file.\n";
return 1;
}
cout<<"Reading file #: ";
outp.setf (ios::scientific ); // set the output format
for (int i=1;i<=N;i++){
std::strcpy(flnm,"");
tmpr=filename(i);
flnmptr=&tmpr[0];
std::strcpy(flnm,flnmptr);
ifstream inp;
inp.open(flnm); // opens the file
if(!inp) // if file couldn't be opened
{
cerr << "Error: file could not be opened" << endl;
exit(1);
}
std::getline(inp,str,'\n');
std::getline(inp,str,'\n');
inp.setf (ios::scientific);
for (int k=0;k<=149;k++){ // k - scanning through Y within single file #i
for (int l=0;l<=199;l++){ // l - scanning through X within single file #i
inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];
}
}
}
}
你说的
Z
isn't missing a subscript, it's intended that way.
但是在您的代码中 Z
被声明为 double[2]
。
错误信息看起来很吓人
[Error] no match for 'operator>>' (operand types are
'std::basic_istream::__istream_type {aka std::basic_istream}' and 'double [2]')
但它的本质意思是:
[Error] no match for 'operator>>' (operand types are
'std::ifstream' and 'double [2]')
您要么必须将 Z
设为单个 double
,要么通过 inp >> Z[i]
之类的索引访问 Z
我不可能知道您需要哪个你的程序,所以这是你必须考虑的事情,或者将问题减少到 minimalistic 版本。
将数据输入数组时出现问题。
我正在使用 Dev C++ 执行和编译。下面是我的代码,问题所在:
for (int k=0;k<=149;k++){ // k - scanning through Y within single file #i
for (int l=0;l<=199;l++){ // l - scanning through X within single file #i
inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];
Z
没有缺少下标,它本来就是这样的。
完整的错误代码。:
[Error] no match for 'operator>>' (operand types are
'std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}' and 'double [2]')
欢迎任何建议谢谢。
完整代码:
#pragma warning(disable:4786)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
using namespace std;
string filename(int filenumber);
int main () {
char *flnmptr;
string str,tmpr;
char flnm[50];
!!! make sure that the array dimensions for input data are right - that might screw the output files
dimensions are written in the 2nd header line of the input file
double X[150], Y[200], Z[2], Mx[150][200][2], My[150][200][2], Mz[100][100][2], time; // data from file
// double hX[5001], vY[5001], hMx[5001],hMy[5001],hMz[5001], vMx[5001], vMy[5001], vMz[5001]; // data to be written to file
//int xcnt, ycnt; // variable to count how many values will be written to a file
const int N=600; //number of files
//const int ptN=20; // number of points in the line
const double timestep=1e-14; // time step of files
const double X0=2.749313e-1; // X coordinate of line to read into vertical stripe output
const double Y0=-9.614638e-1; // Y coordinate of line to read into horizontal stripe output
ofstream outp("SWstripeCoupledCorner50difference10_120GHz.txt"); //opening output file
if (!outp){
cout << "Can't open file.\n";
return 1;
}
cout<<"Reading file #: ";
outp.setf (ios::scientific ); // set the output format
for (int i=1;i<=N;i++){
std::strcpy(flnm,"");
tmpr=filename(i);
flnmptr=&tmpr[0];
std::strcpy(flnm,flnmptr);
ifstream inp;
inp.open(flnm); // opens the file
if(!inp) // if file couldn't be opened
{
cerr << "Error: file could not be opened" << endl;
exit(1);
}
std::getline(inp,str,'\n');
std::getline(inp,str,'\n');
inp.setf (ios::scientific);
for (int k=0;k<=149;k++){ // k - scanning through Y within single file #i
for (int l=0;l<=199;l++){ // l - scanning through X within single file #i
inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];
}
}
}
}
你说的
Z
isn't missing a subscript, it's intended that way.
但是在您的代码中 Z
被声明为 double[2]
。
错误信息看起来很吓人
[Error] no match for 'operator>>' (operand types are 'std::basic_istream::__istream_type {aka std::basic_istream}' and 'double [2]')
但它的本质意思是:
[Error] no match for 'operator>>' (operand types are 'std::ifstream' and 'double [2]')
您要么必须将 Z
设为单个 double
,要么通过 inp >> Z[i]
之类的索引访问 Z
我不可能知道您需要哪个你的程序,所以这是你必须考虑的事情,或者将问题减少到 minimalistic 版本。