c++ - 使用指针访问私有(private)数据成员

标签 c++ pointers dictionary

<分区>

我正在从事一个学校项目,该项目基本上是在构建一本字典。其中一个选项是搜索具有相同定义的词并将其打印出来。 在我的字典课上,我有:

#pragma once
#include "Definition.h"
class Dictionary
{
private:
    /*Private data members*/
    int num_words = 0;
    Definition** book;
public:

    /*Constructors & destructor*/
    Dictionary();
    Dictionary(const Dictionary&);
    ~Dictionary();

    /*Search for existing definition*/
    bool checkCopy(const Definition&);

    /*bool operator overloading*/
    bool operator==(const Dictionary&) const;
    bool operator!=(const Dictionary) const;

    /*Operator = -= += overloading*/
    Dictionary& operator=(const Definition&);
    Dictionary& operator=(const Dictionary&);
    Dictionary& operator-=(const int);
    Dictionary& operator+=(const Definition&);

    /*Input & output operators overloading*/
    friend ostream& operator<<(ostream&, const Dictionary&);
    friend istream& operator>>(istream&, Dictionary&);

    /*Index operator overloading*/
    Definition& operator[](int);
    Definition operator[](int) const;

    /*Sorting dictionary function*/
    void sortDictionary();

    /*Utility functions*/
    int getSize() const;
    bool search(const String&) const;
    void searchCommon() const;
    void findCopy(String&, String&, bool&);
};

然后在定义类中我有:

#pragma once
#include "String.h"
class Definition
{
private:
    /*Private class embers*/
    String word;
    String** def;
    int num_defs = 0;
public:

    /*Constructors & destructor*/
    Definition();
    Definition(const Definition&);
    ~Definition();

    /*Overloading = += -= operator*/
    Definition& operator=(const Definition&);
    Definition& operator+=(const String&);
    Definition& operator-=(int);

    /*Overloading bool operators*/
    bool operator==(const Definition&) const;
    bool operator!=(const Definition&) const;

    /*Overloading input & output operators*/
    friend ostream& operator<<(ostream&, const Definition&);
    friend istream& operator>>(istream&, Definition&);

    /*Overloading index operators*/
    String& operator[](int);
    String operator[](int) const;

    /*Sorting Functions*/
    void sortDefinition();
    void sortOrder();
    void sortDupl();
    const String& getWord() const;
    const String& getDef(int) const;
    int getNumDef() const;
};

现在我正在尝试通过复制字典来搜索公地,当为搜索到的定义找到复制定义时,它会将其从复制的字典中删除。但是我违反了数据,我猜其中一个索引或 getSize/getDefNum 没有返回正常值:

void Dictionary::searchCommon() const {
    Dictionary temp;
    temp = (*this);
    for (int i = 0; i < num_words; ++i)
    {
        String comWord((*book)[i].getWord());
        for (int j = 0; j < (*book)[i].getNumDef(); ++j)
        {
            String comDef((*book)[i].getDef(j));
            bool flag = false;
            temp.findCopy(comDef, comWord, flag);
            if (flag)
            {
                cout << comWord << endl;
                cout << comDef << endl << "-----------------------------------------------" << endl;
            }
        }

    }
}

void Dictionary::findCopy(String& comDef, String& comWord, bool& flag) {
    for (int i = 0; i < num_words; i++)
    {
        for (int j = 0; j < (*book)[i].getNumDef(); j++)
        {
            if (comDef == (*book)[i].getDef(j) && comWord != ((*book)[i].getWord()))
            {
                cout << (*book)[i].getWord();
            (*book)[i] -= j;
                flag = true;
            }

        }
    }
}

帮忙吗?

编辑:这是项目,如果有人可以在他的调试器中检查它,那就太好了: https://github.com/adamorad/Dictionary.git

最佳答案

问题在于您访问 Dictionary 对象的 book 属性的方式。

你将它分配为一个指针数组,像这样的行,这很好:

book = new Definition*[input.num_words];

但是在 searchCommonfindCopy 方法中,您尝试访问它的元素,就好像它是一个指向数组的指针一样:

(*book)[i].getNumDef()

要修复它,请将其替换为首先获取数组的第 i 个元素(指针)然后取消引用它的表达式:*(book[i])

或者更方便地访问定义方法:

book[i]->getNumDef()

并且您在 Definition::getDef(int idx) 方法中遇到了同样的问题。

替换所有这些代码后,您的代码运行良好,尽管我不确定它打印出您想要的结果。

关于c++ - 使用指针访问私有(private)数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969542/

相关文章:

c++ - 运算符优先级与计算顺序

java - 值为 1.9999 的常量叫什么

c++ - 从指针获取迭代器

c - 类型不可知的所属函数

c++ - 在 C++ 中创建演示文稿(我被卡住了)

C++(煤渣): Can't update objects' properties in keyDown function

c - 链接列表无法正常工作

java - 如何以某种格式打印出HashMap的内容?

python - 拆分字符串并生成键值对

python - 如何获取字典列表和字典的嵌套字典中的所有键和值?