因此,我试图创建一个自定义类,但无法弄清楚如何使其正常工作。这是我想出的:
message.h:
#include <errno.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fstream>
#include <string>
using namespace std;
class Message {
public:
Message(string, string, int);
~Message();
string getMessage();
string getSubject();
int getLength();
void setMessage(string);
void setLength(int);
void setSubject(string);
private:
string subject;
string message;
int length;
};
和message.cc:
#include "message.h"
Message::Message(string Subject, string Message, int Length){
subject = Subject;
message = Message;
length = Length;
}
string
Message::getMessage(){
return message;
}
void
Message::setMessage(string Message){
message = Message;
}
string
Message::getSubject(){
return subject;
}
void
Message::setSubject(string Subject){
subject = Subject;
}
int
Message::getLength(){
return length;
}
void
Message::setLength(int Length){
length = Length;
}
这是我正在尝试做的事情:
map<string,vector<Message> > database;
string request = get_request(client);
//store the request in memory
vector<Message> messageList = database.at("user1");
messageList.push_back(new Message("subject", request, request.size()));
database["user1"] = messageList;
这段代码给出了以下编译错误(因为我正在创建新消息):
//no known conversion for argument 1 from Message* to const Message&
但是当我将代码更改为:
//store the request in memory
vector<Message> messageList = database.at("user1");
Message message;
message.setMessage(request);
message.setSubject("subject");
message.setLength(request.length());
messageList.push_back(message);
database["user1"] = messageList;
它为消息消息给出以下错误:
//No matching function for call to Message::Message()
//candidates are:
//Message::Message(str::string, str::string, int)
//Message::Message(const Message&)
//candidate expects 3 and 1 arguments, 0 provided
因此,这使我相信我在消息类(或 header )中缺少允许这种类型的实例化的内容,但是我不知道该怎么做或我所缺少的内容。任何帮助将非常感激。我只对C++有一个非常基本的了解,因为我大多数都是用Java进行编程的,但是无论我尝试多少查找错误或以不同的方式对其进行编码,我都无法成功地编译代码。再次感谢。
最佳答案
将messageList.push_back(new Message("subject", request, request.size()));
更改为:
messageList.push_back(Message("subject", request, request.size()));
您有一个消息 vector (用于管理其自己的内存),而不是指向您所管理的内存的指针的 vector 。
等效地,您可以编写:
Message message("subject", request, request.size()));
messageList.push_back(message);
您尝试使用
Message message;
失败,因为您没有默认的构造函数。在C++ 11中,您还可以编写:
messageList.emplace_back("subject", request, request.size());
其他事情:
Length
)是多余的,因为消息在需要知道时可以执行message.size()
。 database["user1"] = messageList;
将覆盖 map 中已经存在的 vector ;如果要添加到 map 中的 vector 上,则摆脱messageList
并执行database["user1"].push_back("subject", request, request.size());
关于c++ - 我不能在不遇到编译错误的情况下创建自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966233/