【问题标题】:How to fix "error: expected primary -expression before ')' token" in c++?如何在 C++ 中修复“错误:')' 标记之前的预期主表达式”?
【发布时间】:2019-02-17 02:41:16
【问题描述】:

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

我希望它从文件中获取数据并将其放入结构数组中,但我不断收到错误。

【问题讨论】:

  • arrayDrink 未定义,while(!eof()) 几乎总是错误的。

标签: c++ arrays function structure


【解决方案1】:

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 指出了您的其他问题。

【讨论】:

    【解决方案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

    【讨论】:

    • 如何让对象去那里?
    • 如何定义和创建对象?
    • 就像你做int i = 0;一样。如果定义对象让您感到困惑,我建议您花一些时间阅读教程或一本好书!
    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 2015-03-31
    • 2012-07-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多