如何在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)