У меня есть следующий код, который в основном берет вектор и записывает его в файл, а затем открывает файл и записывает содержимое в другой вектор.Оператор >> не любит вектор <bool>?
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<bool> q, p;
// ^^^^
q.resize(5, 0);
q[0] = 1;
q[2] = 1;
q[4] = 1;
ofstream ofile("file.log");
for (int i = 0; i<5; i++)
ofile <<q[i]<<" ";
ofile.close();
ifstream ifile("file.log");
p.resize(5);
int i = 0;
// vvvvvvvvvvvv
while(ifile>> p[i])
{
cout <<i<<"\t"<<p[i]<<endl;
i++;
}
ifile.close();
return 0;
}
То, что я заметил, что этот код компилируется и работает без проблем, когда вектор содержит двойной, Int и длинные тип данных, но выдает ошибку, если она изменяется на BOOL. Это сообщение об ошибке, которое я получаю:
../src/timeexample.cpp:31: error: no match for ‘operator>>’ in ‘ifile >> p.std::vector<bool, _Alloc>::operator[] [with _Alloc = std::allocator<bool>](((long unsigned int)i))’
Итак, кто-нибудь знает, почему это происходит?
Спасибо
В коде, который вы отправили, нет 'vector'. –
2013-05-09 19:37:23
Я считаю, что переменная bool имеет размер 1 бит. так что битдвиг ничего не сделает. Проверьте @Chris. Я ошибся, прочитав спецификацию как бит, когда он четко говорит о байте. – Nomad101
@ Nomad101, переменные должны быть не менее одного байта. – chris