2017-04-24 19 views
-3

に 'のstd ::文字列' から変換することはできません私は、Microsoft Visual C++ 2010(32ビットシステム)に取り組んできましたエラーC2440: '初期化': 'ダブル* []'

をコンパイル・フェーズで私はというエラーを取得:

1>------ Build started: Project: pruebavecot, Configuration: Debug Win32 ------ 
1> pruebavecot.cpp 
1>c:\users\andresgraco\desktop\pruebavecot\pruebavecot\pruebavecot.cpp(64): error C2057: expected constant expression 
1>c:\users\andresgraco\desktop\pruebavecot\pruebavecot\pruebavecot.cpp(64): error C2466: cannot allocate an array of constant size 0 
1>c:\users\andresgraco\desktop\pruebavecot\pruebavecot\pruebavecot.cpp(64): error C2440: 'initializing' : cannot convert from 'std::string' to 'double *[]' 
1>   No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

コード:私は.txtファイルからデータを受け取り、中、後の使用のために([i]の中で)ベクトルに保管しようとしています

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() { 
string line; 
ifstream myfile ("Vetor_Oscilacao.txt"); 
if (myfile.is_open()) 
{ 
int i=1; 
while (getline (myfile,line)) 
{ 
    cout << stod(line) << '\n'; 
    for(double i=1; i<100; i++) 
{ 
     double in[i]=line; 
} 
} 
myfile.close(); 
} 

else cout << "Unable to open file"; 
getchar(); 
return 0; 
} 

fftw。 .txtファイルのデータは、次のように構成されています。

21.000000 
24.000000 
25.000000 
25.000000 
21.000000 
22.000000 
24.000000 
25.000000 
...(data #100) 

ありがとうございました。

+1

'for(double i = 1; i <100;私はなぜ 'int'か整数ベースのループカウンタの代わりに' double'を使用していますか? – PaulMcKenzie

+1

'[in]'配列をどこで定義していますか? – Alfabravo

+0

'stod(line)'を使って、行をdoubleに変換して配列要素に割り当てることができます。 – Barmar

答えて

0

文字列を直接配列に割り当てることはできません。そして、あなたのforループは持っていることに意味がありません。

代わりに、より多くのこのような何かを試してみてください:

また
#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

int main() 
{ 
    std::ifstream myfile ("Vetor_Oscilacao.txt"); 
    if (myfile.is_open()) 
    { 
     std::vector<double> in; 
     std::string line; 

     while (std::getline(myfile, line)) 
     { 
      double value = std::stod(line); 
      std::cout << value << '\n'; 
      in.push_back(value); 
     } 

     myfile.close(); 

     // use 'in' as needed... 
    } 
    else 
     std::cout << "Unable to open file"; 

    std::cin.get(); 
    return 0; 
} 

、ラインの全てが、浮動小数点数をしているので、あなたの代わりにstd::getline()operator>>を使用することができ、そしてそれはあなたのための構文解析を処理してみましょう:

次いで std::istream_iteratorstd::copy()を使用することによってさらに簡素化することができる
#include <iostream> 
#include <fstream> 
#include <vector> 

int main() 
{ 
    std::ifstream myfile ("Vetor_Oscilacao.txt"); 
    if (myfile.is_open()) 
    { 
     std::vector<double> in; 
     double value; 

     while (myfile >> value) 
     { 
      std::cout << value << '\n'; 
      in.push_back(value); 
     } 

     myfile.close(); 

     // use 'in' as needed... 
    } 
    else 
     std::cout << "Unable to open file"; 

    std::cin.get(); 
    return 0; 
} 

、代わりに手動ループ:

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <iterator> 
#include <algorithm> 

int main() 
{ 
    std::ifstream myfile ("Vetor_Oscilacao.txt"); 
    if (myfile.is_open()) 
    { 
     std::vector<double> in; 
     std::copy(
      std::istream_iterator<double>(myfile), 
      std::istream_iterator<double>(), 
      std::back_inserter(in) 
     ); 
     myfile.close(); 

     for (size_t i = 0; i < in.size(); ++i) 
      std::cout << in[i] << '\n'; 

     // use 'in' as needed... 
    } 
    else 
     std::cout << "Unable to open file"; 

    std::cin.get(); 
    return 0; 
} 
関連する問題