Working on a school assignment, and I'm on the home stretch (or at least I hope). In my code I'm getting this error on a few lines:
error: expected primary-expression before ']' token|
I'm using CodeBlocks to write in C++. Here's the code
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
using namespace std;
//declare constant variables for the filenames
const std::string inputFileName = "subscriptions.txt";
const std::string outputExpiredFileName = "expiredSubscriptions.txt";
const std::string outputNonexpiredFileName = "mailingLabels.txt";
//declare struct
struct SubscriberInfo
{
int subscriberNumber;
string lastName;
string firstName;
string streetNumber;
string city;
string state;
string zipCode;
int expiryDate;
};
//function prototypes
int readFromFile(ifstream &inStream, SubscriberInfo subList[]);
int choiceSelector();
void searchForSubscription(int subNumber, SubscriberInfo subscriberList[], int nSubs);
void writeToExpiredFile(ofstream &outFile, SubscriberInfo subscriberList[], int nSubs, int currentDate);
void writeToMailingLabels(ofstream &outFile, SubscriberInfo subscriberList[], int nSubs, int currentDate);
bool checkExpiry(int today, int expiry);
int main()
{
//declare stream variables
ifstream inFile;
inFile.open(inputFileName);
//need to make a checker function for these two outFile bits
ofstream outFile;
outFile.open(outputExpiredFileName);
outFile.open(outputNonexpiredFileName);
//error checker to make sure the file is opened correctly
if (inFile.fail())
{
cout << "ERROR: Can't open file";
exit(1);
}
//read from file and store each line in a separate variable of struct SubscriberList
SubscriberInfo subscriberList[8];
int numSubs = readFromFile(inFile, subscriberList);
int choice;
choice = choiceSelector();
do {
if (choice == 1){
searchForSubscription(subscriberList, nSubs);
} else if (choice == 2){
writeToExpiredFile(outFile, subscriberList, nSubs, currentDate)
writeToMailingLabels(outFile, subscriberList, nSubs, currentDate)
}
}
while (choice != 3);
inFile.close();
outFile.close();
}
//function definitions
int choiceSelector()
{
int selection;
//get user input to search for subscription or to generate report
cout << "------------OPTIONS-------------" << endl;
cout << "1. Search for subscription" << endl;
cout << "2. Generate reports" << endl;
cout << "3. Exit program" << endl;
cout << "Enter your selection: ";
cin >> selection;
return selection;
}
int readFromFile(ifstream &inStream, SubscriberInfo subList[])
{
string tempSubNumber;
string tempExpiryDate;
string blankLine;
int i=0;
while (getline(inStream, tempSubNumber))
{
subList[i].subscriberNumber = stoi(tempSubNumber);
getline(inStream, subList[i].lastName);
getline(inStream, subList[i].firstName);
getline(inStream, subList[i].streetNumber);
getline(inStream, subList[i].city);
getline(inStream, subList[i].state);
getline(inStream, subList[i].zipCode);
subList[i].expiryDate = stoi(tempExpiryDate);
getline(inStream, blankLine);
i++;
}
return i;
}
void searchForSubscription(SubscriberInfo subscriberList[], int nSubs)
{
int j=0;
int subNumber;
bool isFound = false;
cout << "Enter your subscription number: ";
cin >> subNumber;
while (j<nSubs){
if (subNumber == subscriberList[j].subscriberNumber){
isFound = true;
cout << "Name: " << subscriberList[j].firstName << " " << subscriberList[j].lastName << endl;
cout << "Address: " << subscriberList[j].streetNumber << ", " << subscriberList[j].city << ", " << subscriberList[j].state << " " << subscriberList[j].zipCode << endl;
cout << "Subscription Number: " << subscriberList[j].subscriberNumber << endl;
cout << "Expired on: " << subscriberList[j].expiryDate << endl;
cout << endl;
j = nSubs;
}
j++;
}
if (isFound == false){
cout << "This subscription does not exist." << endl;
}
}
bool checkExpiry(int today, int expiry)
{
if (today > expiry)
return true;
else
return false;
}
void writeToExpiredFile(ofstream &outFile, SubscriberInfo subscriberList[], int nSubs, int currentDate)
{
bool isExpired;
for (int j=0; j<nSubs; j++)
{
isExpired = checkExpiry(currentDate, subscriberList[j].expiryDate);
if (isExpired == true){
outFile << subscriberList[j].subscriberNumber << endl;
outFile << subscriberList[j].lastName << endl;
outFile << subscriberList[j].firstName << endl;
outFile << subscriberList[j].streetNumber << endl;
outFile << subscriberList[j].city << endl;
outFile << subscriberList[j].state << endl;
outFile << subscriberList[j].zipCode << endl;
outFile << subscriberList[j].expiryDate << endl;
outFile << endl;
}
}
}
void writeToMailingLabels(ofstream &outFile, SubscriberInfo subscriberList[], int nSubs, int currentDate)
{
bool isExpired;
for (int j=0; j<nSubs; j++)
{
isExpired = checkExpiry(currentDate, subscriberList[j].expiryDate);
if (isExpired == false){
outFile << "Name: " << subscriberList[j].firstName << " " << subscriberList[j].lastName << endl;
outFile << "Address: " << subscriberList[j].streetNumber << ", " << subscriberList[j].city << ", " << subscriberList[j].state << " " << subscriberList[j].zipCode << endl;
outFile << "Subscription Number: " << subscriberList[j].subscriberNumber << endl;
outFile << "Expired on: " << subscriberList[j].expiryDate << endl;
outFile << endl;
}
}
}
When I try to build, I get that error and others like it on lines 81 and 83. I imagine it's either an issue with those function calls, or a simple syntax error I'm not seeing.
EDIT: I removed the comment block at the top since this text input doesn't seem to pick it up.
EDIT2: On @Savaria's suggestion, I removed the square brackets from the function call. I'm still getting this error on (what is now) line 67:
error: 'nSubs' was not declared in this scope
I'm still not quite sure what to put in here. If I just remove it, it doesn't receive enough arguments and hits me with the error for that.
Also, I am receiving a very similar error on line 69, but it's basically the same. Once I figure out how to solve the line 67 issue, I can use the same knowledge for line 69.