簡體   English   中英

錯誤:數組'u'的大小具有非整數類型'double'|

[英]error: size of array ‘u’ has non-integral type ‘double’|

我有以下代碼,並且收到錯誤“數組'u'的大小具有非整數類型'double'|”

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <fstream>


#define steps 1000.0
#define time 1000.0

using namespace std;


int main()
{

double u[steps][time];
double a;
int data[10];

cout << "Please enter the value of ratio  cdt/dx :"<<endl;
cin >> a;


//initialize matrix u

for (int i=0;i<steps;i++)
        for (int j=0;j<time;j++)
            u[i][j]=0;

// fill matrix u

for (int i=1;i<time-1;i++) {
    for (int j=1;j<steps-1;j++){
        if (i==1)
        u[j][i]=0; //initial condition
        else
        if (j==1 && i>=1 && i<=50)
                    u[j][i]=50;
        else
            u[j][i+1]=pow(a,2)*(u[j+1][i]-2*u[j][i]+u[j-1][i])+2*u[j][i]-u[j][i-1]; //solution of wave equation

    }
    }

//create and open data files
for (int k=1;k<=10;k++){
ofstream data[k];
data[k].open("Data"data[k]".dat");

}

//fill files with data
for (int i=1;i<steps;i++){
data1<<i<<"\t"<<u[i][99]<<endl;
data2<<i<<"\t"<<u[i][199]<<endl;
data3<<i<<"\t"<<u[i][299]<<endl;
data4<<i<<"\t"<<u[i][399]<<endl;
data5<<i<<"\t"<<u[i][499]<<endl;
data6<<i<<"\t"<<u[i][599]<<endl;
data7<<i<<"\t"<<u[i][699]<<endl;
data8<<i<<"\t"<<u[i][799]<<endl;
data9<<i<<"\t"<<u[i][899]<<endl;
data10<<i<<"\t"<<u[i][999]<<endl;

}

//close files
for (int k=1;k<=10;k++){
data[k].close();
}

    return 0;
}

這是關於u的大小的錯誤嗎?我該如何克服呢? 另外,在這部分代碼中

//create and open data files
    string k;
    stringstream ss;
    ss << k;
    filename += ss.string();
    string filename = "Data";
    for (int k=1;k<=10;k++){
    ofstream data[k]; 
    filename += data[k]; 
    filename += ".dat";
    data[k].open(filename);
       }

它給我“未聲明文件名”和“'struct std :: stringstream'沒有名為'string'的成員”

我做了那個循環,因為我試圖避免

流數據1; ofstream data2; .......我可以使其工作嗎?

謝謝!

是的,只需將步驟和時間從1000.0更改為1000

就像編譯器說的那樣,1000.0的類型為double-一個浮點值。 數組大小必須為整數。 無論如何,您不能有1.5個元素!

關於data[k].open("Data"data[k]".dat"); 在C和C ++中,可以通過寫"foo" XXX "bar"來聯接字符串文字 ,但這不適用於直到運行時才知道的值。 相反,您必須使用std::string+運算符,例如:

std::string filename = "Data";
filename += data[k];
filename += ".dat";
data[k].open(filename);

或者(如果open需要一個普通的C字符指針):

data[k].open(filename.c_str());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM