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指出。
我正在写这段代码,我有 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指出。