简体   繁体   English

得到“错误:']'标记之前的预期主表达式”c++

[英]Getting "error: expected primary-expression before ']' token" c++

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++.我正在使用 CodeBlocks 编写 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.当我尝试构建时,我在第 81 行和第 83 行遇到了该错误和其他类似错误。我想这可能是那些 function 调用的问题,或者是我没有看到的简单语法错误。

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. EDIT2:根据@Savaria 的建议,我从 function 调用中删除了方括号。 I'm still getting this error on (what is now) line 67:我仍然在第 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.如果我只是将其删除,它不会收到足够的 arguments 并因此出现错误。
Also, I am receiving a very similar error on line 69, but it's basically the same.另外,我在第 69 行收到了一个非常相似的错误,但基本相同。 Once I figure out how to solve the line 67 issue, I can use the same knowledge for line 69.一旦我弄清楚如何解决第 67 行问题,我就可以对第 69 行使用相同的知识。

Ok, so I've gotten rid of those errors and everything.好的,所以我已经摆脱了这些错误和一切。 I'm now having an issue trying to get this while loop to work correctly.我现在在尝试让这个 while 循环正常工作时遇到问题。 Here's the code as it is now这是现在的代码

#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(SubscriberInfo subscriberList[], int nSubs);
bool checkExpiry(int today, int expiry);
void writeToExpiredFile(ofstream &outFileToExpired, SubscriberInfo subscriberList[], int nSubs, int currentDate);
void writeToMailingLabels(ofstream &outFileToMailingLabels, SubscriberInfo subscriberList[], int nSubs, int currentDate);


int main()
{
    //declare stream variables
    ifstream inFile;
    inFile.open(inputFileName);

    ofstream outFileToExpired;
    ofstream outFileToMailingLabels;
    outFileToExpired.open(outputExpiredFileName);
    outFileToMailingLabels.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];

    cout << "------------OPTIONS-------------" << endl;
    cout << "1. Search for subscription" << endl;
    cout << "2. Generate reports" << endl;
    cout << "3. Exit program" << endl;

    //get numSubs from returned i form readFromFile();
    int numSubs = readFromFile(inFile, subscriberList);
    int choice;
    choice = choiceSelector();
    int currentDate;
    //display main menu

    do {
        if (choice == 1){
            searchForSubscription(subscriberList, numSubs);
            cout << "test to show selection 1" << endl;
            //choice = 0;
            choice = choiceSelector();
        } else if (choice == 2){
            cout << "Please enter the current date in YYMM format: ";
            cin >> currentDate;
            writeToExpiredFile(outFileToExpired, subscriberList, numSubs, currentDate);
            writeToMailingLabels(outFileToMailingLabels, subscriberList, numSubs, currentDate);
            cout << "test to show selection 2" << endl;
            //choice = 0;
            choice = choiceSelector();

        } else if (choice == 3){
            return 0;
        }
        choice = choiceSelector();
    } while (choice == 0);

    inFile.close();
    outFileToExpired.close();
    outFileToMailingLabels.close();
}


//function definitions
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);
        getline(inStream, tempExpiryDate);
        subList[i].expiryDate = stoi(tempExpiryDate);
        getline(inStream, blankLine);
        i++;
    }
    return i;
}

int choiceSelector()
{
    int selection;
    //get user input to search for subscription or to generate report

    cout << "Enter your selection: ";
    cin >> selection;
    return selection;
}

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 &outFileToExpired, SubscriberInfo subscriberList[], int nSubs, int currentDate)
{
    bool isExpired;
    for (int j=0; j<nSubs; j++)
    {
        isExpired = checkExpiry(currentDate, subscriberList[j].expiryDate);
        if (isExpired == true){
            outFileToExpired << subscriberList[j].subscriberNumber << endl;
            outFileToExpired << subscriberList[j].lastName << endl;
            outFileToExpired << subscriberList[j].firstName << endl;
            outFileToExpired << subscriberList[j].streetNumber << endl;
            outFileToExpired << subscriberList[j].city << endl;
            outFileToExpired << subscriberList[j].state << endl;
            outFileToExpired << subscriberList[j].zipCode << endl;
            outFileToExpired << subscriberList[j].expiryDate << endl;
            outFileToExpired << endl;
        }
    }
}

void writeToMailingLabels(ofstream &outFileToMailingLabels, SubscriberInfo subscriberList[], int nSubs, int currentDate)
{
    bool isExpired;
    for (int j=0; j<nSubs; j++)
    {
        isExpired = checkExpiry(currentDate, subscriberList[j].expiryDate);
        if (isExpired == false){
            outFileToMailingLabels << "Name: " << subscriberList[j].firstName << " " << subscriberList[j].lastName << endl;
            outFileToMailingLabels << "Address: " << subscriberList[j].streetNumber << ", " << subscriberList[j].city << ", " << subscriberList[j].state << " " << subscriberList[j].zipCode << endl;
            outFileToMailingLabels << "Subscription Number: " << subscriberList[j].subscriberNumber << endl;
            outFileToMailingLabels << "Expired on: " << subscriberList[j].expiryDate << endl;
            outFileToMailingLabels << endl;
        }
    }
}

I'm mostly confused on this part here:我对这里的这一部分很困惑:

    choice = choiceSelector();
    int currentDate;
    //display main menu

    do {
        if (choice == 1){
            searchForSubscription(subscriberList, numSubs);
            cout << "test to show selection 1" << endl;
            //choice = 0;
            choice = choiceSelector();
        } else if (choice == 2){
            cout << "Please enter the current date in YYMM format: ";
            cin >> currentDate;
            writeToExpiredFile(outFileToExpired, subscriberList, numSubs, currentDate);
            writeToMailingLabels(outFileToMailingLabels, subscriberList, numSubs, currentDate);
            cout << "test to show selection 2" << endl;
            //choice = 0;
            choice = choiceSelector();

        } else if (choice == 3){
            return 0;
        }
        choice = choiceSelector();
    } while (choice == 0);

DONE.完毕。 I finally got it figured out.我终于弄明白了。 My condition for the do while loop was wrong.我的 do while 循环条件是错误的。 I changed it to我把它改成

    do {
        if (choice == 1){
            searchForSubscription(subscriberList, numSubs);
            choice = 0;
        } else if (choice == 2){
            cout << "Please enter the current date in YYMM format: ";
            cin >> currentDate;
            writeToExpiredFile(outFileToExpired, subscriberList, numSubs, currentDate);
            writeToMailingLabels(outFileToMailingLabels, subscriberList, numSubs, currentDate);
            choice = 0;
        }
        choice = choiceSelector();
    } while (choice != 3);```

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM