如何在C ++中修复“错误:')'标记之前的预期主要表达式”?

时间:2019-02-17 02:41:16

标签: c++ arrays function structure

我正在编写此代码,我有2个结构和1个函数。该函数采用一种结构作为参考,并在其中使用变量。问题是我不断收到以下2个错误:

error: expected primary-expression before ')' token
error: 'arrayDrink' was not declared in this scope

我不知道我在做什么错。

我也尝试了其他结构,但是不断出现此错误:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>

using namespace std;
const unsigned int maxDrinkItems = 20;

struct DrinkItem
{
    unsigned int id;
    string name;
    double price;
    unsigned int NumDrinksOfSameType;
    unsigned int drinksPurchased = 0;

};

struct DrinkMachine
{
    unsigned int versionNumber = 1;
    unsigned int totalDrinks;
    unsigned int arrayDrink[maxDrinkItems];
};

bool create(DrinkMachine &drinkMachine)
{
    ifstream inputFile;
    inputFile.open("drink_machine.txt");

    if(inputFile.fail())
    {
        return false;
    }
    else
    {

        while (inputFile.eof() || drinkMachine.totalDrinks == 20)
        {
            inputFile >> drinkMachine.totalDrinks;

            for (int i = 0; i < drinkMachine.totalDrinks; i++)
            {
                inputFile >> arrayDrink[i].name;
                inputFile >> arrayDrink[i].price;
                inputFile >> arrayDrink[i].NumDrinksOfSameType;
            }

        }

        inputFile.close();
        return true;
    }

}

在这里我调用该函数:

int main()
{
    create(DrinkMachine);

    return 0;
}

我希望它从文件中获取数据并将其放入结构数组中,但是我一直在出错。

2 个答案:

答案 0 :(得分:3)

while循环中的条件与您的想法不符。

while (inputFile.eof() || drinkMachine.totalDrinks == 20)

在循环中进行输入提取时,应首先进行提取,检查是否成功,然后继续。 eof()检查是否设置了流中的eofbit(流结束位),这是在前一次提取失败时发生的。通常,在提取时,您使用fail()检查流有效性。

while (inputFile >> drinkMachine.totalDrinks && !inputFile.fail() && drinkMachine.totalDrinks == 20)

我们可以摆脱!inputFile.fail(),因为每个流都有内置的operator bool(),因此它会隐式检查fail()

while (inputFile >> drinkMachine.totalDrinks && drinkMachine.totalDrinks == 20)

橡果指出了您的其他问题。

答案 1 :(得分:2)

您的代码中有几个错误。

首先,您需要访问drinkMachine对象才能在此处访问arrayDrink

{
    inputFile >> arrayDrink[i].name;
    inputFile >> arrayDrink[i].price;
    inputFile >> arrayDrink[i].NumDrinksOfSameType;
}

看看您在循环中做什么:

for (int i = 0; i < drinkMachine.totalDrinks; i++)

另一个:您正在尝试使用类型而不是对象来调用create

create(DrinkMachine);

相反,您需要定义一个DrinkMachine对象,然后将其传递给create