Как исправить "ошибку: ожидаемое первичное выражение до ')' токена" в c ++? - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу этот код, и у меня есть 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;
}

Я хочу, чтобы она приняладанные из файла и положить его в массив структур, но я продолжаю получать ошибки.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Условие в цикле 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.

0 голосов
/ 17 февраля 2019

В вашем коде есть несколько ошибок.

Во-первых, вам нужно получить доступ к вашему 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...