Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类C+的共享ptr向量+;_C++_Oop_Vector_Smart Pointers - Fatal编程技术网

C++ 类C+的共享ptr向量+;

C++ 类C+的共享ptr向量+;,c++,oop,vector,smart-pointers,C++,Oop,Vector,Smart Pointers,正如标题所说,我想从一个类的shared_ptr声明一个向量。 这是我们班的成员 类标题的删除: std::vector<std::shared_ptr<connection>>RemoteVerbindungen; 未执行成员方法“starUp”。 无法通过迭代器访问“RemoteConnections”向量。编译器错误类型转换不可能 我是否在指向新创建的“连接”类型对象的向量下创建新的ptr?您应该更喜欢std::make_shared()而不是手动使用new: s

正如标题所说,我想从一个类的shared_ptr声明一个向量。 这是我们班的成员

类标题的删除:

std::vector<std::shared_ptr<connection>>RemoteVerbindungen;
未执行成员方法“starUp”。 无法通过迭代器访问“RemoteConnections”向量。编译器错误类型转换不可能


我是否在指向新创建的“连接”类型对象的向量下创建新的ptr?

您应该更喜欢
std::make_shared()
而不是手动使用
new

std::vector RemoteVerbindungen;
...
RemoteVerbindungen.push_back(std::make_shared(SERVICE_SOCKET));
并且,在同一语句中声明和初始化迭代器时,首选
auto

auto-VerbindungsNr=RemoteVerbindungen.begin();
现在,也就是说,
RemoteVerbindungen[0]->startUp()向量
不是空的,并且索引0处的
共享ptr
未设置为
空ptr
,则code>应该可以正常工作

但是,
RemoteVerbindungen[VerbindungsNr]->startUp()
肯定是错误的,因为迭代器不是索引。您需要取消对迭代器的引用以访问它所引用的
shared\u ptr
,然后您可以使用
shared\u ptr::operator->
访问
连接
对象的成员,例如:

(*VerbindungsNr)->启动();

您告诉我们,您甚至不清楚“不起作用”是什么意思。请提供一个答案并澄清问题。我希望这个问题或问题能更好地公式化。好的,第二部分是因为你使用的迭代器是错误的。迭代器不是索引,它更像是指向元素的指针。第一个问题仍然不清楚,因为您尚未提供或显示预期会发生什么(以及如何确定未调用该函数)
  RemoteVerbindungen.push_back(std::shared_ptr<connection>(new connection(SERVICE_SOCKET)));      
  //Iterator positionieren
  std::vector<std::shared_ptr<connection>>::iterator VerbindungsNr = RemoteVerbindungen.begin();
RemoteVerbindungen[0]->startUp();
RemoteVerbindungen[VerbindungsNr]->startUp();