【问题标题】:error: no matching function for call to vector::push_back错误:没有匹配的函数调用 vector::push_back
【发布时间】:2020-10-30 14:47:06
【问题描述】:

我是 C++ 新手,我正在尝试使用 pushback 函数将食品订单存储在矢量对象中,以便稍后可以编译和重复食品订单。但我收到错误:当我尝试使用 pushback 函数存储食品订单时,没有调用“std::vector::push_back(OrderEntry*&)”的匹配函数。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

enum class OrderType {chickenrice, wantonnoodle, coffee, tea};

class OrderEntry
{
    public:
        OrderEntry( int _qty, 
                    OrderType _orderType)
        : qty(_qty),
          orderType(_orderType)
        {
        }
        int qty;
        OrderType orderType;
};

void printMenu()
{
    std::cout << "Welcome to Restaurant Firebird" << std::endl;
    std::cout << "a . Order a plate of chicken rice" << std::endl;
    std::cout << "b . Order a plat for wanton noodles" << std::endl;
    std::cout << "c . Order a cup of Coffee" << std::endl;
    std::cout << "d . Order a cup of Tea" << std::endl;
    std::cout << "e . Repeat Order" << std::endl;
    std::cout << "f . Exit Menu" << std::endl;
    std::cout << "Type an option from a-f" << std::endl;
}

string getUserOption()
{
    string choice;
    std::cin >> choice;
    return choice;
}

int getQuantity()
{
    int qty;
    std::cin >> qty;
    return qty;
}
 
int main()
{
    std::vector<OrderEntry> orderQueue;

    string choice = getUserOption();
    int qty;
    
    while(true)
    {
        printMenu();

        std::endl (std::cout); 

        if (choice=="a")
        {
            std::cout << "How many plates of chicken rice would you like to order?" << std::endl; 
            OrderType order = OrderType::chickenrice;
            std::endl (std::cout);
            qty = getQuantity();
            std::cout << "Thank you for your order of " << qty << " plates of chicken rice." << std::endl; 
            std::endl (std::cout);
            OrderEntry* food_order = new OrderEntry (qty, order);
            orderQueue.push_back(food_order);
        }
        if (choice=="b")
        {
            std::cout << "How many plates of wanton noodles would you like to order?" << std::endl;
            OrderType order = OrderType::wantonnoodle};
            std::endl (std::cout);
            qty = getQuantity();
            std::cout << "Thank you for your order of " << qty << " plates of wanton noodles." << std::endl; 
            std::endl (std::cout); 
            OrderEntry* food_order = new OrderEntry (qty, order);
            orderQueue.push_back(food_order);
        }
        if (choice=="c")
        {
            std::cout << "How many cups of Coffee would you like to order?" << std::endl; 
            OrderType order = OrderType::coffee};
            std::endl (std::cout);          
            qty = getQuantity();
            std::cout << "Thank you for your order of " << qty << " cups of Coffee." << std::endl; 
            OrderEntry* food_order = new OrderEntry (qty, order);
            orderQueue.push_back(food_order);
        }
        if (choice=="d")
        {
            std::cout << "How many cups of Tea would you like to order?" << std::endl; 
            OrderType order = OrderType::tea};
            std::endl (std::cout);
            qty = getQuantity();
            std::cout << "Thank you for your order of " << qty << " cups of Tea." << std::endl; 
            std::endl (std::cout); 
            OrderEntry* food_order = new OrderEntry (qty, order);
            orderQueue.push_back(food_order);
        }
        if (choice=="e")
        {
            std::cout << "You have ordered: " << std::endl;
            
            for (unsigned int i = 0; i < orderQueue.size(); ++i)
            {
                std::cout << orderQueue[i].qty << std::endl;
            }
            std::endl (std::cout);
        }
        if (choice=="f")
        {
            std::cout << "Thank you and see you again soon." << std::endl;
            return 0;
        }
    }  
}

【问题讨论】:

    标签: c++ vector enums push-back


    【解决方案1】:
                OrderEntry* food_order = new OrderEntry (qty, order);
                orderQueue.push_back(food_order);
    

    是错误的,因为orderQueue 的元素是OrderEntry,而您尝试推送OrderEntry*OrderEntry 没有接受OrderEntry* 的构造函数。

    应该是

                OrderEntry food_order = OrderEntry (qty, order);
                orderQueue.push_back(food_order);
    

    或者干脆

                orderQueue.push_back(OrderEntry (qty, order));
    

    【讨论】:

    • std::vector&lt;OrderEntry *&gt; orderQueue;,如果他出于任何原因想保留new,但他需要循环向量并在所有单个元素上调用delete
    • 最好使用emplace_back 而不是push_back,这样既省时又省内存
    • 你漏掉了orderQueue.push_back({qty, order});
    猜你喜欢
    • 2021-05-05
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多