C++ 如何纠正这些c++;错误';无效转换';和';运算符'不匹配;

C++ 如何纠正这些c++;错误';无效转换';和';运算符'不匹配;,c++,binary-search-tree,C++,Binary Search Tree,我试图通读包含一系列单词和句子的文件。 然后,需要存储唯一的单词,并保持每个不同单词的计数。如果有多个单词,则应通过减少计数对单词进行排序 按字母顺序排列,数量相同的单词。(此订购可通过以下方式实现: 在最后,我想输出排序列表中的第一个和最后十个单词,以及它们的计数 如何修复此常量字符*错误。我不知道我的代码中有什么错误,或者我在哪里以及我到底需要更改什么: [错误]从“char”到“const char*”的转换无效[-fppermissive] [错误]与“运算符”不匹配 这就是您的错误行的

我试图通读包含一系列单词和句子的文件。 然后,需要存储唯一的单词,并保持每个不同单词的计数。如果有多个单词,则应通过减少计数对单词进行排序 按字母顺序排列,数量相同的单词。(此订购可通过以下方式实现: 在最后,我想输出排序列表中的第一个和最后十个单词,以及它们的计数

如何修复此
常量字符*
错误。我不知道我的代码中有什么错误,或者我在哪里以及我到底需要更改什么:

[错误]从“char”到“const char*”的转换无效[-fppermissive]

[错误]与“运算符”不匹配 这就是您的错误行的外观(无论您对代码的意图是什么,我只看了3个bug)

此比较函数解决第一个和第二个编译错误:

#include <string>

bool Compare(WordType &A, WordType &B)
{
    if (A.count < B.count)
        return true;

    if (A.count > B.count)
        return false;

    std::string w1{ Words[A.word] }, w2{ Words[B.word] }; // Fix

    return (strcmp(w1.c_str(), w2.c_str()) < 0);
}
-

除此之外,我更喜欢使用
std:array
&初始化变量:

#include <array>

struct WordType
{
    int word = 0;
    int len = 0, count = 0;
};

constexpr int MaxWords = 50000;
std::array<char, MaxWords * 10> Words;
std::array<WordType, MaxWords> Counters;

int NumWords = 0;

// & to call in main():
Words.fill('\0');
#包括
结构字类型
{
int字=0;
int len=0,count=0;
};
constexpr int MaxWords=50000;
std::数组字;
std::数组计数器;
int NumWords=0;
//要在main()中调用(&T):
字。填充('\0');

关于错误有什么不清楚的地方
Words[A.word]
是一个
char
,而
strncpy
期望第二个参数是
const char*
。我不知道现在的编译器会精确地说明它们遇到的错误。2) 要修复错误,需要知道您对所述代码的意图。你的意图,用这样的代码是不清楚的。除了引用的使用,这是C,而不是C++,因为它被标记。没有理由复制你的比较函数中的字符串。
#include <string>

bool Compare(WordType &A, WordType &B)
{
    if (A.count < B.count)
        return true;

    if (A.count > B.count)
        return false;

    std::string w1{ Words[A.word] }, w2{ Words[B.word] }; // Fix

    return (strcmp(w1.c_str(), w2.c_str()) < 0);
}
if (Compare(Counters[j], pivot)) // Fix
#include <array>

struct WordType
{
    int word = 0;
    int len = 0, count = 0;
};

constexpr int MaxWords = 50000;
std::array<char, MaxWords * 10> Words;
std::array<WordType, MaxWords> Counters;

int NumWords = 0;

// & to call in main():
Words.fill('\0');