How to fix "error: expected primary -expression before ')' token" in c++?

How to fix "error: expected primary -expression before ')' token" in c++?

我正在写这段代码,我有 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;
}

我想让它从文件中获取数据并将其放入结构数组中,但我总是出错。

您的代码中有几个错误。

首先,您需要访问 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

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)

你的其他问题已被Acorn指出。