std::shared_ptr<> 中 new 之前的预期标识符

-1 c++ shared-ptr new-operator

我在“Serializer”类中使用共享指针时收到错误。

这是我的详细错误:

 client.h:28:52: error: expected identifier before new
 std::shared_ptr<Serializer> serializerObj2(new Serializer);
                                                ^
 client.h:28:52: error: expected , or .. before new
Run Code Online (Sandbox Code Playgroud)

这是我的最小代码:

std::shared_ptr<Serializer> serializerObj2(new Serializer);
Run Code Online (Sandbox Code Playgroud)

这是我的扩展代码:

#include "serializer.h" 
#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<thread>
#include<string>
#include<cstring>
#include<utility>
#include <boost/filesystem.hpp>
#include<memory>

namespace TCP
{    
class Client
{
public:
    void start();
private:

    int networkSocket=socket(AF_INET,SOCK_STREAM,0);
    std::shared_ptr<Serializer> serializerObj2(new Serializer);
    std::shared_ptr<Serializer> serializerObj=std::make_shared<Serializer>();

    bool checkConnection();
    std::pair<bool,std::string>getFile();
    void sendMessage();
    void setMessage();
}; 
}//closes namespace `
Run Code Online (Sandbox Code Playgroud)

这是我的序列化器 h 文件:

#ifndef D_SERIALIZER_H
#define D_SERIALIZER_H
#include<iostream>
#include<arpa/inet.h>
#include<string>
namespace TCP
{
class Serializer
{

public:
    //sender
    void addIntToStream(int);
    void addStringToStream(std::string);
    void addCharToStream(char);
    std::pair<bool,const char*>getStream(size_t requestSize_);
    void delStream(size_t deleteSize_);

    //receiver
    void addByteToStream(const char*,size_t);
    std::pair<bool,int> retrieveIntFromStream();
    std::pair<bool,char> retrieveCharFromStream();
    std::pair<bool,std::string> retrieveStringFromStream(int);

    Serializer()
    {
        _stream="";
        _it=_stream.begin();
    }

private:
    std::string _stream;
    std::string::iterator _it;
};

}    //closes namespace
#endif
Run Code Online (Sandbox Code Playgroud)

sp2*_*nny 5

class Serializer
{
public:
    std::shared_ptr<Serializer> serializerObj2(new Serializer);
Run Code Online (Sandbox Code Playgroud)

这是类中的变量声明。
传统上,它们只能在构造函数中初始化。
然而,从 C++11 开始,它们也可以使用

type var = value;
Run Code Online (Sandbox Code Playgroud)

句法。您不能在那里使用括号,因为它会被解析为函数声明。所以将其更改为:

std::shared_ptr<Serializer> serializerObj2 = new Serializer;
Run Code Online (Sandbox Code Playgroud)