c++ - 我不能在不遇到编译错误的情况下创建自定义类

标签 c++ class compiler-errors

因此,我试图创建一个自定义类,但无法弄清楚如何使其正常工作。这是我想出的:

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/

    相关文章:

    c++ - 如果根本不使用单个取消引用运算符,指向指针的指针会打印什么值?

    c++ - 有没有办法打破这种对单元测试的依赖?

    javascript - 是否可以 ? "Javascript Subclass"

    java - 我试图找出为什么我的类(class)工资单没有正确添加所有工资......帮助我找到错误

    java - Java 中泛型的未知编译错误

    c++ - OpenCV - Videocapture 中未处理的异常

    c# - 对从托管代码创建的事件的 WaitForSingleObject 访问被拒绝

    java - 如何定义具有静态值的内部类并使其可以访问外部类对象

    node.js - 尝试使用 this.refs.value 时,使用 this.refs 已被弃用错误

    c++ - 第一个 C++ 程序出错