C++矢量推送类

C++矢量推送类,c++,vector,C++,Vector,我试图编译下面的代码,但是消息没有匹配的函数来调用'std::vector::push_backdouble&'。有谁能帮我解决这个问题吗 struct Booking { double bT; double aT; double dT; }; class New { private: std::vector<Booking> vectorBookings; public: void gB(double bR,double aR, double

我试图编译下面的代码,但是消息没有匹配的函数来调用'std::vector::push_backdouble&'。有谁能帮我解决这个问题吗

struct Booking
{
   double bT;
   double aT;
   double dT;
};

class New
{
private:
    std::vector<Booking> vectorBookings;

public:

    void gB(double bR,double aR, double dR,double startTime,double finishTime)
    {
        double bT;
        do
        {   
            bT   = startTime   - (1.0/bR);
        } while(bT<finishTime);

        double aT   = bT - (1.0/aR);
        double dT = aT - (1.0/dR); 

        vectorBookings.push_back(bT,aT, dT);
    }  
};
您必须添加{}来构造一个Booking来推回

您必须添加{}来构造一个Booking来推回


如果您为预订定义了构造函数,则可以使用emplace_back:


然后只需将vectorBookings.push_backbT,aT,dT更改为vectorBookings.emplace_backbT,aT,dT。

如果定义了用于预订的构造函数,则可以使用emplace_back:


然后只需将vectorBookings.push_backbT,aT,dT更改为vectorBookings.emplace_backbT,aT,dT。

。我相信它在初始化时使用括号,而不是大括号。@chris,太棒了。“我不知道这是缺陷还是故意的行为。”谢尔盖亚,很可能是故意的。在设计初始化对象的函数时,必须进行此选择。最近有一篇博文或其他东西讨论了这个选择与std::optional的关系。我还有一个问题。当我尝试在主函数中为我的成员functin gB插入一些值时,它表示“不匹配”operator@Shawn您必须在尝试这样做的地方显示代码片段。如果您当前的问题已解决,并且您还有另一个问题,请随时在堆栈溢出上发布新问题。。我相信它在初始化时使用括号,而不是大括号。@chris,太棒了。“我不知道这是缺陷还是故意的行为。”谢尔盖亚,很可能是故意的。在设计初始化对象的函数时,必须进行此选择。最近有一篇博文或其他东西讨论了这个选择与std::optional的关系。我还有一个问题。当我尝试在主函数中为我的成员functin gB插入一些值时,它表示“不匹配”operator@Shawn您必须在尝试这样做的地方显示代码片段。如果您当前的问题已解决,并且您还有另一个问题,请随时在堆栈溢出上发布新问题。
vectorBookings.push_back({bT,aT, dT});
struct Booking
{
    Booking(double bT, double aT, double dT) : bT {bT}, aT {aT}, dT {dT} {}
    double bT, aT, dT;
};