2014-02-01 4 views
-1

У меня есть время с этой программой. Я работаю с файлом данных, который имеет 12 строк, по одному на каждый месяц и 2 числовые позиции после имени месяца. Пример:Ошибка компиляции Visual C++

9 января 11

я в основном зачистки название месяца до первых 3-х букв, превращая их в верхний регистр, возят чисел (целые числа), чтобы работать с ними. Я использую VS 2012, и как только я раскомментирую строку «Infile >> Student.numBoys», я получаю эту хриплую ошибку компиляции: «p01.cpp (41): ошибка C2679: двоичный '>>': оператор не найден, который принимает правый операнд типа «int [2]» (или нет приемлемого преобразования) «

Естественно, я даже не добираюсь до файла данных для начала. Я занимаюсь этим несколько часов, поэтому я немного откинусь. Если я пропущу что-то явно очевидное, пройдите мягко на меня.

#include <iostream> 
    #include <iomanip> 
    #include <string> 
    #include <fstream> 
    #include <assert.h> 


    using namespace std; 
    using namespace System; 

    struct TStudent { char month[10]; 
         int numBoys[2]; 
         int numGirls[2]; 
         int sumStudents[2]; 
         int totBoys[3]; 
         int totGirls[3]; 
         int totStudents[3]; 
        }; 

    const char* AUTHOR = "Sally George    Assignment #1 \n\n"; 

    int i; 

    void main() { 
     TStudent Student; 

     Console::Clear(); 
     cout << AUTHOR; 

    ifstream Infile("P01.DAT"); 
    assert(Infile); 

     for (i=1; i<=12; i++) 
     { Infile.get(Student.month, 4); 
      Infile.ignore(1); 
      // Infile >> Student.numBoys; 
      strupr(Student.month); 
      cout << Student.month << endl; 
      Infile.ignore(80, '\n'); 
     } 

} 
+1

Ну, почему вы ожидали, что это сработает? В потоках C++ нет операторов для ввода/вывода массива. Единственным исключением являются массивы 'char' (decayig to' char * 'указатели), используемые для ввода-вывода C-string. Вы хотите выводить и вводить массивы - вы будете реализовывать их вручную (функции библиотеки могут помочь вам здесь, но все же это будет ваша ответственность). Фактически, вы можете преуспеть «вывести» массив (который просто преобразует его в указатель и выводит значение указателя - определенно не то, что вам нужно), но ввод массива не будет работать. – AnT

+0

Попробуйте это вместо: 'Infile >> Student.numBoys [0];' и то же самое с 1, если вы хотите прочитать 2 числа. Ожидайте бросок, если входные данные не являются номерами. –

+0

Две большие ошибки, которые я сделал, - это поместить значение размера в мои объявления с целыми числами. Это заставило компилятор принять char. Затем я включил переменные в моей структуре, которые были ненужными. Убрав их, я смог выполнить свою задачу. Спасибо всем за помощь! BTW, я не мог использовать массивы для своей задачи, но ответ ниже был правильным ответом с заявлением после. – SillySally

ответ

0

Вам может понадобиться индивидуально ввод элементов массива, например:

Infile >> Students.numBoys[0]; 
Infile >> Students.numBoys[1]; 

Std. C++ не определяет оператор >> для массивов, кроме char.

Смежные вопросы