1

我创建了一个类,它引用一些成员作为智能指针,我想创建一个此类的数组,但我得到不同类型的错误

class ConnectionType : public SimpleRefCount<ConnectionType> {
public:
  Ptr<Socket> txMstrSocPtr; /// Pointer to Master tx socket
  Ptr<Socket> rxMstrSocPtr; /// Pointer to Master rx socket
  Ptr<Socket> txSlavSocPtr; /// Pointer to Slave tx socket
  Ptr<Socket> rxSlavSocPtr; /// Pointer to Slave rx socket

  //ConnectionType();
  //~ConnectionType();

  void rxMstrCallBack(Ptr<Socket> socket);
  void rxSlavCallBack(Ptr<Socket> socket);
};

Ptr<ConnectionType> ConnectionArray[NUMBER_OF_CONNECTIONS] = CreateObject<ConnectionType>();

它给了我错误错误 1 ​​错误 C2075:'ConnectionArray':数组初始化需要花括号
2 IntelliSense:使用聚合对象初始化'{...}'

4

1 回答 1

3

如果您知道在编译时将返回的连接数CreateObject(即,NUMBER_OF_CONNECTIONS是编译时常量),您可以使用std::array< Ptr< ConnectionType >, NUMBER_OF_CONNECTIONS >. std::array对标准容器最接近的原始数组进行建模,并且在编写现代 C++ 时更喜欢原始数组。如果NUMBER_OF_CONNECTIONS具有在运行时确定的大小,则可以使用std::vector< Ptr< ConnectionType > >. 所以更改为

#include <array>
...
std::array< Ptr< ConnectionType >, NUMBER_OF_CONNECTIONS > ConnectionArray{ CreateObject< ConnectionType >() };

或者

#include <vector>
...
std::vector< Ptr< ConnectionType > > ConnectionArray{ CreateObject< ConnectionType >() };

此外,如果您还没有意识到,C++11 增加了对三种标准智能指针的支持:unique_ptrshared_ptrweak_ptr它们的所有权语义不同)如果它们满足您的需求,您可能更愿意使用它们而不是您自己的自制智能指针需要,您可以使用实现它们的编译器。

于 2014-11-25T03:25:56.887 回答