'。getDrinkPrice'的左边必须有class / struct / union

时间:2016-04-20 21:37:00

标签: c++

这是我正在学习的c ++书中的一个项目。

我一直收到错误

"left of '.getDrinkPrice' must have class/struct/union"

我试过修理它,但我只是继续弄乱它。视觉工作室错误列表对新用户来说不太友好,这真的很困扰我。我显然不希望代码被重新发布,但我确实希望指向正确的方向。

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

double wallet = 10.00;
int change;
bool isRunning;
bool isChoosing;
int userChoice;
double pricePaid;

class Soda {
private:
    string drinkName;
    double drinkPrice;
    int drinkAmt;

public:
    Soda() {
        drinkName;
        drinkPrice = .75;
        drinkAmt = 20;
    }

    void setDrinkName(string name) {
        drinkName = name;
    }

    string getDrinkName() {
        return drinkName;
    }

    void setDrinkPrice(double price) {
        drinkPrice = price;
    }

    double getDrinkPrice() {
        return drinkPrice;
    }

    void setDrinkAmt(int amt) {
        drinkAmt = amt;
    }

    void setNewDrinkAmount(int amt, int i) {
        drinkAmt = amt - i;
    }

    int getDrinkAmt() {
        return drinkAmt;
    }

};

// Declares classes
Soda * Cola = new Soda;
Soda * RootBeer = new Soda;
Soda * LemonLime = new Soda;
Soda * Grape = new Soda;
Soda * Cream = new Soda;
Soda *soda = new Soda;

static void init() {

// Pushes the Vending Machine data to the screen
    cout << "Drink Name: " << " " << "Drink Cost: " << " " << "Number in machine: \n";

    cout << *Cola->getDrinkName << " " << *Cola->getDrinkPrice << " " << *Cola->getDrinkAmt <<endl;

    cout << *RootBeer->getDrinkName << " " << *RootBeer->getDrinkPrice << " " << *RootBeer->getDrinkAmt << endl;

    cout << *LemonLime->getDrinkName << " " << *LemonLime->getDrinkPrice << " " << *LemonLime->getDrinkAmt << endl;

    cout << *Grape->getDrinkName << " " << *Grape->getDrinkPrice << " " << *Grape->getDrinkAmt << endl;

    cout << *Cream->getDrinkName << " " << *Cream->getDrinkPrice << " " << *Cream->getDrinkAmt << endl;

    cout << endl;
    cout << "You have $" << wallet << endl;
    cout << endl;
}

void checkValidPurchase(Soda soda, double w, double p) {
    double priceOfDrink = soda.getDrinkPrice();
    int amountOfDrink = soda.getDrinkAmt;

    // If there are enough drinks are in the machine
    if (amountOfDrink > 0) {

        // If user has enough money
        if (w >= priceOfDrink) {

            // If amount paid is greater than drink price
            if (p > priceOfDrink) {

                // Calculate price and change
                w = w - p;
                double getChange = p - priceOfDrink;

                // Return Change
                cout << "Paid " << p << " returning " << getChange << endl;

                // Update amounts
                int j = soda.getDrinkAmt;
                soda.setNewDrinkAmount(j, 1);
                w = w + getChange;
            }

            // If amount paid is equal to drink price
            else if (p == priceOfDrink) {

                // Calculate price
                w = w - p;
                cout << "Paid " << p << endl;

                // Update amounts
                int j = soda.getDrinkAmt;
                soda.setNewDrinkAmount(j, 1);
            }

            // If amount paid is less than drink price
            else if (p < priceOfDrink) {

                // Prompt error and return to drink select
                cout << "You did not enter enough money, returning to drink select. \n";
                Sleep(3000);
            }
        }

        // If user does not have enough money
        else {
            cout << "Not enough money in wallet. \n";
            double amtNeeded = w + (w - priceOfDrink);
            cout << "You have: " << w << " Needed for purchase: " << amtNeeded << endl;
            Sleep(3000);
        }
    }

    // If there are not enough drinks in machine
    else {
        cout << "Not enough of " << soda.getDrinkName << " in machine. \n";
        Sleep(3000);
    }

}

void sodaMachine() {

    // Starts the drink select loop
    isChoosing = true;

    while (isChoosing) {

        // gets user input
        cout << "Enter the number of the soda you would like: \n";
        cout << "Or to quit, press escape \n";

        switch (userChoice) {
        case 1:
            cout << "Dispensing Cola \n";
            cout << "Cost is .75 \n";
            cin >> pricePaid;

            checkValidPurchase(*Cola, wallet, pricePaid);
            isChoosing = false;
            break;

        case 2:
            cout << "Dispensing Root Beer \n";
            cout << "Cost is .75 \n";
            cin >> pricePaid;

            checkValidPurchase(*RootBeer, wallet, pricePaid);
            isChoosing = false;
            break;

        case 3:
            cout << "Dispensing Lemon Lime \n";
            cout << "Cost is .75 \n";
            cin >> pricePaid;

            checkValidPurchase(*LemonLime, wallet, pricePaid);
            isChoosing = false;
            break;

        case 4:
            cout << "Dispensing Grape \n";
            cout << "Cost is .80 \n";
            cin >> pricePaid;

            checkValidPurchase(*Grape, wallet, pricePaid);
            isChoosing = false;
            break;

        case 5:
            cout << "Dispensing Cream \n";
            cout << "Cost is .80 \n";
            cin >> pricePaid;

            checkValidPurchase(*Cream, wallet, pricePaid);
            isChoosing = false;
            break;

        case WM_CHAR:

            if (GetAsyncKeyState(VK_ESCAPE)) {
                cout << "Exiting program \n";
                isRunning = false;
                break;
            }

        default:
            isChoosing = false;
            break;
        }

    }
}

int main() {

    // Sets class values
    Cola->setDrinkName("1. Cola");
    RootBeer->setDrinkName("2. RootBeer");
    LemonLime->setDrinkName("3. LemonLime");
    Grape->setDrinkName("4. Grape");
    Grape->setDrinkPrice(.80);
    Cream->setDrinkName("5. Cream");
    Cream->setDrinkPrice(.80);

    isRunning = true;

    while (isRunning) {

        // Run Program
        init();
        sodaMachine();
        system("cls");

    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

*Cola->getDrinkName不正确。

请改用Cola->getDrinkName()(*Cola).getDrinkName();对于您的代码中的所有其他同类调用也是如此。