我正在制作一个程序来确定一条推文是快乐还是悲伤,我想我对推文进行标记,然后创建一个映射,将单词存储为键,总共使用了多少次,以及使用了多少次它被用在快乐的推文和悲伤的推文中。
我认为这是一个很好的方法,虽然可能有更好的选择,但我不太明白如何为我想创建的地图编写三规则。 Classifier 对象将是用于对推文进行情感分类的对象,下面是 CLassifier.h 文件,不包括训练数据的其他方法(DSString 对象是字符数组)
class Classifier {
private:
map<DSString, map<char, float>> *words;
public:
Classifier();
Classifier(const DSString& objToCopy); // Copy Constructor
~Classifier(); // Destructor
Classifier &operator=(const Classifier& objToCopy); // Copy Assignment Overload
}
下面是 CLassifier.cpp 文件,不包含用于训练和预测的方法的代码。
using namespace std;
Classifier::Classifier() {
map<DSString, map<char, float>> *words;
}
// 1/3 Copy Constructor
Classifier::Classifier(const Classifier& objToCopy) {
words = new map<DSString, map<char, float>>(*objToCopy.words);
}
// 2/3 Destructor
Classifier::~Classifier() {
delete words;
words = nullptr;
}
// 3/3 Copy Assignment Operator Overload
Classifier& Classifier::operator=(const Classifier& objToCopy) {
if (this != &objToCopy) {
delete words;
words = new map<DSString, map<char, float>>(*objToCopy.words);
}
return *this;
}
当我尝试编译程序时,我收到有关我的复制构造函数的错误消息:
Classifier.cpp:15:51: error: definition of implicitly-declared ‘constexpr Classifier::Classifier(const Classifier&)’
15 | Classifier::Classifier(const Classifier& objToCopy) {
我做错了什么我无法编译我的程序?如果我错误地使用地图,我可以更改什么以使程序仍然运行?有没有更好/更有效的方法来做到这一点?我需要扫描大约 2 万条推文的 CSV 文件。
你的头文件有错误。您在复制构造函数中使用了错误的类名。你有这个:
Classifier(const DSString& objToCopy); // Copy Constructor
应该是这样的:
Classifier(const Classifier& objToCopy); // Copy Constructor
这是你在没有指针的情况下重写的代码(并且修复了错误)
class Classifier {
private:
map<DSString, map<char, float>> words;
public:
};
这被称为零规则,因为您不需要编写析构函数、复制构造函数或复制赋值运算符。编译器生成的是正确的。