ошибка C2440: «инициализация»: невозможно преобразовать из «std :: string» в «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)

Большое спасибо за Вашу помощь.

-3

Решение

Вы не можете присвоить строку непосредственно массиву. И ваш 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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]