错误 C2440:'initializing':无法从 'std::string' 转换为 'double *[]'

error C2440: 'initializing' : cannot convert from 'std::string' to 'double *[]'

我一直在使用 Microsoft Visual C++ 2010(32 位系统)

在编译阶段,我收到一条错误消息:

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 文件接收数据并将其存储在向量中(在 [i] 中)以供以后在 fftw 中使用。 .txt文件中的数据组织如下:

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

非常感谢您的帮助。

您不能将字符串直接分配给数组。而且你的 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;
}