2014-09-06 4 views
3

Я получаю эту ошибку, Indirection требует указателя-указателя ('int invalid') в этом коде, я думаю, что неправильно использую empPtr в этом коде, но я не уверен.Indirection требуется операнд указателя

Спасибо заранее, ребята.

Я также буду включать другие классы по этой ссылке. https://gist.github.com/anonymous/08ff6c5284c179c9a323

Мой текстовый файл ввода выглядит следующим образом.

123,John,Brown,125 Prarie Street,Staunton,IL,62088 
124,Matt,Larson,126 Hudson Road,Edwardsville,IL,62025 
125,Joe,Baratta,1542 Elizabeth Road,Highland,IL,62088 
126,Kristin,Killebrew,123 Prewitt Drive,Alton,IL,62026 
127,Tyrone,Meyer,street,999 Orchard Lane,Livingston,62088 

Вот мой main.cpp.

#include <iostream> 
#include <string> 
#include <fstream> 
#include "Employee.h" 

using namespace std; 

bool openFileForReading(ifstream& fin, const string& filename); 
bool openFileForWriting(ofstream& fout, const string& filename); 

int readFromFile(ifstream& in, Employee empArray[]); 

void writeToFile(ofstream& out, const Employee empArray[], const int numberofEmployees); 

int main() { 

    ifstream fin; 
    ofstream fout; 

    if(!openFileForReading(fin, "employeesIn.txt")) { 
     cerr << "Error opening employeesIn.txt for reading." << endl; 
     exit(1); 
    } 

    if(!openFileForWriting(fout, "employeesOut.txt")) { 
     cerr << "Error opeing employeesOut.txt for writing." << endl; 
     exit(1); 
    } 

    Employee employeeArray[50]; 

    int employeeCount = readFromFile(fin, employeeArray); 

    fin.close(); 

    writeToFile(fout, employeeArray, employeeCount); 

    fout.close(); 

    cout << "Program successful." << endl << endl; 


    return 0; 
} 

bool openFileForReading(ifstream& fin, const string& filename) { 
    fin.open("employeesIn.txt"); 

    return (fin.is_open()); 
} 

bool openFileForWriting(ofstream& fout, const string& filename) { 
    fout.open("employeesOut.txt"); 

    return (fout.is_open()); 
} 

int readFromFile(ifstream& in, Employee empArray[]) { 
    int temp = 0; 
    string eidText; 
    string first; 
    string last; 
    string street; 
    string city; 
    string state; 
    string zipcode; 

    while(!in.eof()) { 
     getline(in, eidText, ','); 
     getline(in, first, ','); 
     getline(in, last, ','); 
     getline(in, street, ','); 
     getline(in, city, ','); 
     getline(in, state, ','); 
     getline(in, zipcode); 

     empArray[temp].setEid(stoi(eidText)); 
     empArray[temp].setName(first, last); 
     empArray[temp].setAddress(street, city, state, zipcode); 

     temp++; 
    } 

    return temp; 
} 

void writeToFile(ofstream& out, const Employee empArray[], const int numberOfEmployees) { 

    for (int i = 0; i < numberOfEmployees; i++){ 
     out << "Employee Record: " << empArray[i].getEid() 
     << endl 
     << "Name: " << empArray[i].getName() 
     << endl 
     << "Home Address: " << empArray[i].getAddress() 
     << endl 
     << endl; 
    } 
} 
+0

Это было, когда я думал, что у меня это было правильно:/ – MatthewTingle

ответ

2

Вы

int empPtr = 0; 

следуют

(*empPtr).setEid(stoi(eidText)); 

, который явно является причиной этой ошибки.

+1

Что бы вы изменили int empPtr? Кроме того, что вы думаете о моих объявлениях массива? – MatthewTingle

+0

Прежде всего, вы никогда не используете значение 'Employee empPtr = employeeArray [50];', поэтому я не уверен, какова цель этой строки. Хотя хотя вы и обращаетесь к индексу за концом массива ('[50]'), это ошибка времени выполнения и не вызывает ошибку компилятора. Во-вторых, 'empPtr' не является указателем, это просто переменная стека типа' Employee'. Я не уверен, что вы пытаетесь сделать в 'readFromFile', но в этом случае вы не можете разыменовать не указательный тип' int', что и есть 'empPtr' в этом методе. – mclaassen

+0

Я не хотел использовать empPtr в первую очередь, но был передан кому-то другим, я изменил приведенный выше код на то, что я изначально имел до empPtr. Мой выходной файл открывается, но на него ничего не записывается. – MatthewTingle

1

Эта строка неверна.

Employee empPtr = employeeArray[50]; 

Максимальный достоверный показатель для employeeArray является 49.

Чтобы получить первый элемент массива, использование:

Employee empPtr = employeeArray[0]; 

Чтобы получить последний элемент массива, использование:

Employee empPtr = employeeArray[49]; 

Подробнее о доступе к C и массивы C++ можно найти на http://www.augustcouncil.com/~tgibson/tutorial/arr.html и http://www.tutorialspoint.com/cprogramming/c_arrays.htm.

+0

Что я должен изменить? – MatthewTingle

+0

Не было бы ошибкой времени выполнения? – mclaassen

+0

@mclaassen Да, это будет ошибка времени выполнения. –

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