简体   繁体   English

朋友类可以在C ++中从其朋友类创建对象吗?

[英]Can a friend class create objects from its friend classes in C++?

These are the code inside my two C++ header files where I declare two classes, one is friend of the other: 这些是我的两个C ++头文件中的代码,在其中我声明了两个类,一个是另一个的朋友:

==>The first class creates a hash table and fills it with words from a given file. ==>第一个类创建一个哈希表,并用给定文件中的单词填充它。

#include "remove_duplicates.h"
class Hash_class{

protected:
    list<string> *hashTable;
    string input_file;
    string output_file;
    int input_file_size;
    friend class remove_duplicates;
    //void file_size();

public:

    /*load the words in the hash Table;
    by calculating the hash Code of each string*/
    Hash_class(string input_file,string output_file="output_file.txt");

    ~Hash_class(){
        fclose(input_file);
        fclose(ouput_file);
    }

    int hashCode( const string input_word);

    void loadInHash();

    void write_in_output();

    int get_input_file_size(){
        return input_file_size;
    }

    string get_input_file(){
        return input_file;
    }

    string get_output_file(){
        return output_file;
    }
};

In the second class I wanted to create an object from the first class and act on it, by first filling the hash table inside the object created then removing all the words that are concidered duplicates (if the Levenshtein distance is close to a certain proportion). 在第二个类中,我想从第一个类中创建一个对象并对其进行操作,方法是先将散列表填充到创建的对象中,然后删除所有重复的单词(如果Levenshtein距离接近某个比例) 。

#include "Hash_class.h"
class remove_duplicates{
protected:
    Hash_class hash_object;
public:

    remove_duplicates(Hash_class & hash_object);

    int Levenshtein_distance(string s1,string s2);

    void set_purge();

};

The problem is when I compile the code I get the error: ([Error] 'Hash_class' does not name a type) If is it possible can you please tell me how or some sources where I can learn about it. 问题是当我编译代码时出现错误:([[Error]'Hash_class'没有命名类型)。如果有可能,请您告诉我如何或从何处可以了解到它。 If it's not possible then some hints will be a great thing thanks. 如果不可能的话,那么一些提示将是一件很棒的事情,谢谢。

("I use GCC 4.3.2") (“我使用GCC 4.3.2”)

This looks like a circular include. 这看起来像一个循环包含。

  • "Hash_class.h" includes "remove_duplicates.h" “ Hash_class.h”包括“ remove_duplicates.h”
  • "remove_duplicates.h" includes "Hash_class.h" “ remove_duplicates.h”包括“ Hash_class.h”

To fix it, remove this line from "Hash_class.h": 要解决此问题,请从“ Hash_class.h”中删除此行:

#include "remove_duplicates.h"

That should work because the line 那应该工作,因为线

friend class remove_duplicates;

requires no information about how class remove_duplicates is implemented. 不需要有关如何实现class remove_duplicates信息。

EDIT: To avoid further errors, wrap both header files in include guards . 编辑:为避免进一步的错误,请将两个头文件都包装在include guards中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM