У меня есть время с этой программой. Я работаю с файлом данных, который имеет 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');
}
}
Ну, почему вы ожидали, что это сработает? В потоках C++ нет операторов для ввода/вывода массива. Единственным исключением являются массивы 'char' (decayig to' char * 'указатели), используемые для ввода-вывода C-string. Вы хотите выводить и вводить массивы - вы будете реализовывать их вручную (функции библиотеки могут помочь вам здесь, но все же это будет ваша ответственность). Фактически, вы можете преуспеть «вывести» массив (который просто преобразует его в указатель и выводит значение указателя - определенно не то, что вам нужно), но ввод массива не будет работать. – AnT
Попробуйте это вместо: 'Infile >> Student.numBoys [0];' и то же самое с 1, если вы хотите прочитать 2 числа. Ожидайте бросок, если входные данные не являются номерами. –
Две большие ошибки, которые я сделал, - это поместить значение размера в мои объявления с целыми числами. Это заставило компилятор принять char. Затем я включил переменные в моей структуре, которые были ненужными. Убрав их, я смог выполнить свою задачу. Спасибо всем за помощь! BTW, я не мог использовать массивы для своей задачи, но ответ ниже был правильным ответом с заявлением после. – SillySally