在C++中,友元类可以从友元类创建对象吗

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

本文关键字:友元 创建对象 C++      更新时间:2023-10-16

这是我的两个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;
}
};

在第二个类中,我想从第一个类中创建一个对象并对其进行操作,首先在创建的对象中填充哈希表,然后删除所有经过排序的重复单词(如果Levenstein距离接近某个比例(。

#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"(

这看起来像一个循环include。

  • "Hash_class.h"包括"remove_duplicates.h">
  • "remove_duplicates.h"包括"Hash_class.h">

要修复它,请从"Hash_class.h"中删除此行:

#include "remove_duplicates.h"

这应该起作用,因为线

friend class remove_duplicates;

不需要关于如何实现CCD_ 1的信息。

编辑:为了避免进一步的错误,请将两个头文件都包装在包含保护中。