簡體   English   中英

C++ 構造函數中的未知編譯錯誤

[英]unknown compilation error in c++ constructors

我無法在 C++ 中運行我的項目。 我有很多錯誤,所以我不知道哪一個錯誤是真實的。 我正在添加代碼和錯誤日志。

#include <iostream>
#include <map>
#include <set>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

class Restaurant {
    Menu menu;
    static const int NUMBER_TABLES = 10;
    set<int> occupiedTables;
    Table tables[NUMBER_TABLES];

    public: Restaurant() {
        for (int i = 0; i < NUMBER_TABLES; i++) {
            tables[i] = Table();
        }
    }

    public: Table getTable(int number) {
        return tables[number];
        }

    public:bool newCustomer(int tableNumber) {
        if (tableNumber < 1 || tableNumber > NUMBER_TABLES || occupiedTables.find(tableNumber) != occupiedTables.end())
            return false;
        tables[tableNumber].setOccupied(true);
        occupiedTables.insert(tableNumber);
        return true;
    }

    public:bool leaveCustomer(int tableNumber) {
        if (tableNumber < 1 || tableNumber > NUMBER_TABLES || occupiedTables.find(tableNumber) == occupiedTables.end())
            return false;
        tables[tableNumber].setOccupied(false);
        occupiedTables.erase(tableNumber);
        return true;
    }

    public: void addToOrder(int tableNumber, int meal_id, int pieces = 1) {
        for (int i = 0; i < pieces; i++) {
            tables[tableNumber].getOrder().setOrder(meal_id);
        }
    }
};

class Table {
    Order order;
    bool occupied = false;

    public: Order getOrder() {
            return order;
        }

    public: bool isOccupied() {
        return occupied;
        }

    public: bool setOccupied(bool occupied) {
        this->isOccupied = occupied;
    }
};

class FoodDrink{
    int id;
    string name;
    double price;
    int preparationTime;

public: FoodDrink() {};

public: FoodDrink(int id, string name, double price, int preparationTime) {
        this->id = id;
        this->name = name;
        this->price = price;
        this->preparationTime = preparationTime;
    }

public: int getId() {
    return id;
}

public: string getName() {
    return name;
}

public: double getPrice() {
    return price;
}

public: int getPreparationTime() {
    return preparationTime;
}

};

class Menu {
    static const int SOUP_NUMBER = 4;
    static const int MAINMEAL_NUMBER = 5;
    static const int SIDEDISH_NUMBER = 3;
    static const int DRINK_NUMBER = 4;
    static const int ALL_MEAL_NUMBER = SOUP_NUMBER + MAINMEAL_NUMBER + SIDEDISH_NUMBER + DRINK_NUMBER;
    FoodDrink allMeals[ALL_MEAL_NUMBER] =
    { FoodDrink(0, "Garlic soup", 1.49, 8), FoodDrink(1, "Vegetable soup", 1.59, 10),
    FoodDrink(2, "Chicken soup", 1.69, 9), FoodDrink(3, "Beef soup", 1.69, 11),
    FoodDrink(4, "Potato dumplings with sheep cheese", 4.95, 16), FoodDrink(5, "Chicken with niva sauce", 6.75, 19),
        FoodDrink(6, "Spicy pork ribs", 7.49, 23), FoodDrink(7, "Beef on mushrooms", 8.25, 22),
        FoodDrink(8, "Vegetable risotto", 4.99, 15), FoodDrink(9, "Chips", 1.79, 7), FoodDrink(10, "Potatos", 1.59, 12),
        FoodDrink(11, "Rice", 1.49, 11), FoodDrink(12, "Beer", 1.79, 2), FoodDrink(13, "Coca-cola", 1.59, 1),
        FoodDrink(14, "Orange juice", 1.99, 1), FoodDrink(15, "Mineral watter", 1.39, 1)
    };

public: FoodDrink getMeal(int id) {
    return allMeals[id];
}



public:void showMenu() {
    cout << "MENU" << endl;
    cout << setw(5) << "Id" << setw(40) << "Meal/drink" << setw(15) << "Price(eur)" << setw(20) << "Preparation(min)" << endl;
    cout << "---------------------------------------------------------------------------" << endl;
    cout << "Soups" << endl;
    for (auto i = 0; i < ALL_MEAL_NUMBER; i++) {
        if (i == SOUP_NUMBER)
            cout << "Main meals" << endl;
        else if (i == SOUP_NUMBER + MAINMEAL_NUMBER)
            cout << "Side dishes" << endl;
        else if (i == SOUP_NUMBER + MAINMEAL_NUMBER + SIDEDISH_NUMBER)
            cout << "Drinks" << endl;
        cout << setw(5) << allMeals[i].getId() << setw(40) << allMeals[i].getName() << setw(13)
            << allMeals[i].getPrice() << setw(12) << allMeals[i].getPreparationTime() << endl;
    }
    }
};

class Order {
    vector<FoodDrink> order;
    bool isPaid = false;
    Menu menu;

    public: void setOrder(int id){
        order.push_back(menu.getMeal(id));
    }


    public: double calculateOrder() {
        double total = 0;
        for (unsigned int i = 0; i < order.size(); i++) {
                total += order[i].getPrice();
        }
        return total;
    }

    public: void pay() {
        isPaid = true;
    }



};

    int main() {
        Menu m;
        Restaurant r;
        r.newCustomer(1);
        r.addToOrder(1, 5);
        r.addToOrder(1, 12, 2);
        cout << r.getTable(1).getOrder().calculateOrder() << endl;
    }

和錯誤日志:

1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(11):
錯誤 C3646:“菜單”:未知覆蓋說明符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(11):
錯誤 C4430:缺少類型說明符 - 假定為 int。 注意:C++ 不支持 default-int
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(14):
錯誤 C3646:“表”:未知的覆蓋說明符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(14):
錯誤 C2143:語法錯誤:在 '[' 之前缺少 ','
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(14):
錯誤 C2143:語法錯誤:在 ';' 之前缺少 ')'
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(14):
錯誤 C2238: ';' 前面的意外標記
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(22):
錯誤 C3646:“getTable”:未知覆蓋說明符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(22):
錯誤 C2059:語法錯誤:'('
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(22):
錯誤 C2334:“{”前的意​​外標記; 跳過明顯的函數體
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(18):
錯誤 C2065:“表”:未聲明的標識符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(18):
錯誤 C3861:“表”:未找到標識符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(29):
錯誤 C2065:“表”:未聲明的標識符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(37):
錯誤 C2065:“表”:未聲明的標識符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(44):
錯誤 C2065:“表”:未聲明的標識符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(50):
錯誤 C3646:“訂單”:未知的覆蓋說明符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(50):
錯誤 C4430:缺少類型說明符 - 假定為 int。 注意:C++ 不支持 default-int
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(53):
錯誤 C3646:“getOrder”:未知覆蓋說明符
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(53):
錯誤 C2059:語法錯誤:'('
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(53):
錯誤 C2334:“{”前的意​​外標記; 跳過明顯的函數體
1>c:\\users\\jmize\\source\\repos\\restauracia\\restauracia\\source.cpp(62):
錯誤 C2659:“=”:用作左操作數 1> 已完成構建項目
“Restauracia.vcxproj”——失敗。

您需要在將它們用作數據成員之前定義類型,和/或在使用對它們的指針或引用之前聲明它們。

按以下順序重新排列您的定義

class FoodDrink
class Menu
class Order
class Table
class Restaurant
int main()

請注意,您不需要在每個類中使用多個public:標記,一個訪問描述符會一直應用,直到找到另一個。

類聲明的順序不正確。 這是正確的類聲明順序。 setOccupied 函數中也存在錯誤。

#include <iostream>
#include <map>
#include <set>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

class FoodDrink{
    int id;
    string name;
    double price;
    int preparationTime;

public: FoodDrink() {};

public: FoodDrink(int id, string name, double price, int preparationTime) {
        this->id = id;
        this->name = name;
        this->price = price;
        this->preparationTime = preparationTime;
    }

public: int getId() {
    return id;
}

public: string getName() {
    return name;
}

public: double getPrice() {
    return price;
}

public: int getPreparationTime() {
    return preparationTime;
}

};

class Menu {
    static const int SOUP_NUMBER = 4;
    static const int MAINMEAL_NUMBER = 5;
    static const int SIDEDISH_NUMBER = 3;
    static const int DRINK_NUMBER = 4;
    static const int ALL_MEAL_NUMBER = SOUP_NUMBER + MAINMEAL_NUMBER + SIDEDISH_NUMBER + DRINK_NUMBER;
    FoodDrink allMeals[ALL_MEAL_NUMBER] =
    { FoodDrink(0, "Garlic soup", 1.49, 8), FoodDrink(1, "Vegetable soup", 1.59, 10),
    FoodDrink(2, "Chicken soup", 1.69, 9), FoodDrink(3, "Beef soup", 1.69, 11),
    FoodDrink(4, "Potato dumplings with sheep cheese", 4.95, 16), FoodDrink(5, "Chicken with niva sauce", 6.75, 19),
        FoodDrink(6, "Spicy pork ribs", 7.49, 23), FoodDrink(7, "Beef on mushrooms", 8.25, 22),
        FoodDrink(8, "Vegetable risotto", 4.99, 15), FoodDrink(9, "Chips", 1.79, 7), FoodDrink(10, "Potatos", 1.59, 12),
        FoodDrink(11, "Rice", 1.49, 11), FoodDrink(12, "Beer", 1.79, 2), FoodDrink(13, "Coca-cola", 1.59, 1),
        FoodDrink(14, "Orange juice", 1.99, 1), FoodDrink(15, "Mineral watter", 1.39, 1)
    };

public: FoodDrink getMeal(int id) {
    return allMeals[id];
}



public:void showMenu() {
    cout << "MENU" << endl;
    cout << setw(5) << "Id" << setw(40) << "Meal/drink" << setw(15) << "Price(eur)" << setw(20) << "Preparation(min)" << endl;
    cout << "---------------------------------------------------------------------------" << endl;
    cout << "Soups" << endl;
    for (auto i = 0; i < ALL_MEAL_NUMBER; i++) {
        if (i == SOUP_NUMBER)
            cout << "Main meals" << endl;
        else if (i == SOUP_NUMBER + MAINMEAL_NUMBER)
            cout << "Side dishes" << endl;
        else if (i == SOUP_NUMBER + MAINMEAL_NUMBER + SIDEDISH_NUMBER)
            cout << "Drinks" << endl;
        cout << setw(5) << allMeals[i].getId() << setw(40) << allMeals[i].getName() << setw(13)
            << allMeals[i].getPrice() << setw(12) << allMeals[i].getPreparationTime() << endl;
    }
    }
};

class Order {
    vector<FoodDrink> order;
    bool isPaid = false;
    Menu menu;

    public: void setOrder(int id){
        order.push_back(menu.getMeal(id));
    }


    public: double calculateOrder() {
        double total = 0;
        for (unsigned int i = 0; i < order.size(); i++) {
                total += order[i].getPrice();
        }
        return total;
    }

    public: void pay() {
        isPaid = true;
    }



};

class Table {
    Order order;
    bool occupied = false;

    public: Order getOrder() {
            return order;
        }

    public: bool isOccupied() {
        return occupied;
        }

    public: bool setOccupied(bool occupied) {
        this->occupied = true;
    }
};

class Restaurant {
    Menu menu;
    static const int NUMBER_TABLES = 10;
    set<int> occupiedTables;
    Table tables[NUMBER_TABLES];

    public: Restaurant() {
        for (int i = 0; i < NUMBER_TABLES; i++) {
            tables[i] = Table();
        }
    }

    public: Table getTable(int number) {
        return tables[number];
        }

    public:bool newCustomer(int tableNumber) {
        if (tableNumber < 1 || tableNumber > NUMBER_TABLES || occupiedTables.find(tableNumber) != occupiedTables.end())
            return false;
        tables[tableNumber].setOccupied(true);
        occupiedTables.insert(tableNumber);
        return true;
    }

    public:bool leaveCustomer(int tableNumber) {
        if (tableNumber < 1 || tableNumber > NUMBER_TABLES || occupiedTables.find(tableNumber) == occupiedTables.end())
            return false;
        tables[tableNumber].setOccupied(false);
        occupiedTables.erase(tableNumber);
        return true;
    }

    public: void addToOrder(int tableNumber, int meal_id, int pieces = 1) {
        for (int i = 0; i < pieces; i++) {
            tables[tableNumber].getOrder().setOrder(meal_id);
        }
    }
};

    int main() {
        Menu m;
        Restaurant r;
        r.newCustomer(1);
        r.addToOrder(1, 5);
        r.addToOrder(1, 12, 2);
        cout << r.getTable(1).getOrder().calculateOrder() << endl;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM