Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中修复“错误:预期前表达式”和“令牌”?_C++_Arrays_Function_Structure - Fatal编程技术网

如何在C++中修复“错误:预期前表达式”和“令牌”?

如何在C++中修复“错误:预期前表达式”和“令牌”?,c++,arrays,function,structure,C++,Arrays,Function,Structure,我正在写这段代码,我有两个结构和一个函数。函数接受其中一个结构作为引用,并使用其中的变量。问题是,我一直遇到以下两个错误: error: expected primary-expression before ')' token error: 'arrayDrink' was not declared in this scope 我不知道我做错了什么 我也尝试了另一种结构,但我一直遇到这样的错误: #include <iostream> #include <fstream>

我正在写这段代码,我有两个结构和一个函数。函数接受其中一个结构作为引用,并使用其中的变量。问题是,我一直遇到以下两个错误:

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;
    }

}

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

您的代码中有几个错误

首先,您需要访问drinkMachine对象才能访问arrayDrink:

查看您在循环中执行的操作:

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

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

代码中有几个错误

首先,您需要访问drinkMachine对象才能访问arrayDrink:

查看您在循环中执行的操作:

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

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

while循环中的条件不能按您所想的方式工作

while (inputFile.eof() || drinkMachine.totalDrinks == 20)
在循环中执行输入提取时,应首先执行提取,检查是否成功,然后继续。eof检查流中是否设置了eofbit流结束位,这在上一次提取失败时发生。通常在执行提取时,检查流的有效性时失败

我们可以摆脱它!inputFile.fail,因为每个流都有一个内置的运算符bool,所以它会隐式检查fail:

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

Acorn指出了您的其他问题。

while循环中的条件与您认为的不一样

while (inputFile.eof() || drinkMachine.totalDrinks == 20)
在循环中执行输入提取时,应首先执行提取,检查是否成功,然后继续。eof检查流中是否设置了eofbit流结束位,这在上一次提取失败时发生。通常在执行提取时,检查流的有效性时失败

我们可以摆脱它!inputFile.fail,因为每个流都有一个内置的运算符bool,所以它会隐式检查fail:

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

Acorn指出了您的其他问题。

arrayDrink未定义,而!eof几乎总是错误的。arrayDrink未定义,而!eof几乎总是错误的。我如何让对象到达那里?我如何定义和创建对象?就像你做int I=0;一样;。如果定义对象让您感到困惑,我建议您花些时间阅读教程或好书!如何让对象到达那里?如何定义和创建对象?就像执行int I=0;一样;。如果定义对象让您感到困惑,我建议您花些时间阅读教程或好书!
while (inputFile >> drinkMachine.totalDrinks && drinkMachine.totalDrinks == 20)