2017-04-24 200 views
-3

我一直對微軟的Visual C++ 2010(32位系統)錯誤C2440:初始化:不能從 '的std :: string' 轉換爲 '雙* []'

在編譯階段我得到一個錯誤,指出:

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 ========== 

代碼:

#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; 
} 

我試圖從一個.txt文件接收數據,並將其存儲在向量(在[1])在以後使用一個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;我爲什麼使用'double'而不是'int'或基於整數的循環計數器? – 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; 
} 

另外,因爲所有的線是浮點數,你可以使用operator>>,而不是std::getline(),讓它處理解析您:

#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; 
} 

然後可以使用std::copy()std::istream_iterator進行簡化,而不是手動循環:

#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; 
} 
相關問題