繁体   English   中英

如何在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;
}

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

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指出。

您的代码中有几个错误。

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

暂无
暂无

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

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