Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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+中的服务器生命周期内进行存储+; 我来自java背景,所以我习惯于直接移动对象,但是C++中有这样的问题。基本上,我在循环中创建了一个消息对象。在该循环中,我将消息对象传递到一个要编辑的函数中,并设置其值。然后我将对象返回到循环中。编辑完对象后,我想将其保存在一个向量中,该向量存储在与其运行的循环相同的类中_C++_Vector_Storage_Temporary - Fatal编程技术网

如何将自定义对象存储在向量中,以便在c+中的服务器生命周期内进行存储+; 我来自java背景,所以我习惯于直接移动对象,但是C++中有这样的问题。基本上,我在循环中创建了一个消息对象。在该循环中,我将消息对象传递到一个要编辑的函数中,并设置其值。然后我将对象返回到循环中。编辑完对象后,我想将其保存在一个向量中,该向量存储在与其运行的循环相同的类中

如何将自定义对象存储在向量中,以便在c+中的服务器生命周期内进行存储+; 我来自java背景,所以我习惯于直接移动对象,但是C++中有这样的问题。基本上,我在循环中创建了一个消息对象。在该循环中,我将消息对象传递到一个要编辑的函数中,并设置其值。然后我将对象返回到循环中。编辑完对象后,我想将其保存在一个向量中,该向量存储在与其运行的循环相同的类中,c++,vector,storage,temporary,C++,Vector,Storage,Temporary,我面临的问题是,在运行循环几次(比如三次)之后,我希望我能够访问向量并拥有三个具有唯一值的独立对象,因为循环每次都应该创建一个新对象,但我发现所有元素都包含与最近存储的对象相同的信息 我猜这与指针和引用的使用有关。我在stack overflow中搜索过类似的问题,但到目前为止没有任何帮助。以下是一些代码片段: 创建消息: void Server::handle(int client) { //cout << "CONNECTED! :)\n"; while (1)

我面临的问题是,在运行循环几次(比如三次)之后,我希望我能够访问向量并拥有三个具有唯一值的独立对象,因为循环每次都应该创建一个新对象,但我发现所有元素都包含与最近存储的对象相同的信息

我猜这与指针和引用的使用有关。我在stack overflow中搜索过类似的问题,但到目前为止没有任何帮助。以下是一些代码片段:

创建消息:

void Server::handle(int client) {
    //cout << "CONNECTED! :)\n";
    while (1) {
        string request = "";
        Message message;
        message.needed = false;
        request = get_request(client);
        if (request.empty()){break;}
         message = parse_request(request, message);
        //cout << "Parsed request." << "\n";
        if (message.needed){
            get_value(client, message);
        }
        handle_message(client, message);
    }
    close(client);
}
void服务器::句柄(int客户端){

//cout我让它工作了。我必须创建一个新的指针对象,然后从message对象复制所有值,并将其存储。此外,我意识到我在引用“message”对象而不是“messages”时出现了一个逻辑错误对象。在这些修复之后,代码正在运行!:)感谢大家的帮助,这是对m*mble最大的帮助,让我多考虑一些点。

如果你不想要
消息的副本,最好使用
std::unique_ptr
存储在向量中。你的
std::vector
在哪里?请显示declar的相关部分对̀
消息
进行编辑,因此请编辑您的问题以澄清:
消息。推回(消息)
部件将创建存储在
消息
对象中的
消息
对象的副本。如果您的数据不正确,我假设
消息
复制任务失败。每当您将参数/返回类型声明为纯
字符串
消息
时,您都在复制它。是否通过当您不打算传递副本时,通过(const)引用(
(const)&
)对事物进行复制。惯用的方法是正确定义复制构造函数。
Message Server::parse_request(string request, Message message) {
    //cout << "Parsing: " << request << "\n";
    //Message message; // = new Message();
    istringstream iss(request);
    iss >> message.command; //store the command
    if(message.command=="put")  {
        //cout << "put\n";
        iss >> message.params[0]; //store user name
        iss >> message.params[1]; //store subject name
       ....etc
    }
    return message;
}
bool Server::handle_message(int client, Message message){
    if(message.command=="put"){
        int count = 0;
        for(int i=0; i<messages.size(); i++){
            if(messages[i].params[0] == message.params[0]){
                count++;
            }
            cout << "Message: " << message.params[1] << "\n";
        }
        message.params[3] = count;
        cout << "Stored a message for: " << message.params[0] << " with " << message.params[2] << " bytes\n";
        messages.push_back(message);
        send_response(client,"OK\n");
    }   
}
class Message {
    public: 
        Message();
        ~Message(); 
        string command;
        string params[4];
        string value;
        bool needed;

    private:
        bool copy(Message message);
};

class Server {
    public:
        Server(int port, bool debugging);
        ~Server();

        void run();

    private:
        void create();
        void close_socket();
        void serve();
        void handle(int);
        string get_request(int);
        bool send_response(int, string);
        Message parse_request(string, Message);
        void get_value(int, Message);
        bool handle_message(int,Message);

        int port_;
        int server_;
        int buflen_;
        char* buf_; 
        string requestcache;
        string valuecache;
        bool debug_;
        vector<Message> messages;
};