我试图通过使用指向对象的共享指针并将其传递给它们的构造函数,从而在多个类中共享对象的向量。我希望这是一个语法类型问题。
我曾尝试将智能指针传递并推入其中,但是在执行实际推入操作时出现只读异常错误。
主叫类:
auto sp1 = std::make_shared<std::vector<cl_order >>() ;
cl_myframeclass * c_frame = new cl_myframeclass(sp1,c_order, v_framed, c_framecustomize, c_vector);
类构造函数:
cl_myframeclass(std::shared_ptr<std::vector <cl_order>> atrans, cl_order * c_order,cl_framedisplay * a, cl_framecustomize * incustom, cl_vector *invector);
班上的私人矢量:
std::shared_ptr< std::vector<cl_order>> alltransactions;
在此构造函数中设置矢量:
auto alltransactions(atrans);
*抛出异常的实际推入函数:
alltransactions->push_back(c_temporder);
如前所述,推送发生时,我会收到一个只读异常。
编辑:我搞砸了,正确的类构造函数有点不同:
cl_myframeclass::cl_myframeclass(std::shared_ptr< std::vector > atrans, cl_order * c_order, cl_framedisplay * c_indisplay, cl_framecustomize * c_incustom, cl_vector * c_vector) : wxFrame(NULL, wxID_ANY, "Home")
那么这个如何初始化呢?
答案 0 :(得分:3)
此行:
auto alltransactions(atrans);
声明一个名为alltransactions
的新变量,其名称与您的成员相同。
您的构造函数应使用成员初始化列表,以确保正确初始化您的成员:
struct my_class {
my_class(std::shared_ptr<std::vector<cl_order>> atrans) : transactions(atrans) {}
std::shared_ptr<std::vector<cl_order>> transactions;
};