繁体   English   中英

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

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

这些是我的两个C ++头文件中的代码,在其中我声明了两个类,一个是另一个的朋友:

==>第一个类创建一个哈希表,并用给定文件中的单词填充它。

#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;
    }
};

在第二个类中,我想从第一个类中创建一个对象并对其进行操作,方法是先将散列表填充到创建的对象中,然后删除所有重复的单词(如果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();

};

问题是当我编译代码时出现错误:([[Error]'Hash_class'没有命名类型)。如果有可能,请您告诉我如何或从何处可以了解到它。 如果不可能的话,那么一些提示将是一件很棒的事情,谢谢。

(“我使用GCC 4.3.2”)

这看起来像一个循环包含。

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

要解决此问题,请从“ Hash_class.h”中删除此行:

#include "remove_duplicates.h"

那应该工作,因为线

friend class remove_duplicates;

不需要有关如何实现class remove_duplicates信息。

编辑:为避免进一步的错误,请将两个头文件都包装在include guards中

暂无
暂无

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

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