我创建了一个类,它引用了一些成员作为智能指针,我想创建一个这个类的数组但是我得到了不同类型的错误
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:&#39; ConnectionArray&#39; :数组初始化需要花括号答案 0 :(得分:2)
如果您知道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_ptr
,shared_ptr
和weak_ptr
(它们的所有权不同语义)如果满足您的需求,您可能更喜欢使用自己的智能指针,并且可以使用实现它们的编译器。