朋友 class 可以在 C++ 中从其朋友 classes 创建对象吗?
Can a friend class create objects from its friend classes in C++?
这些是我的两个 C++ 头文件中的代码,我在其中声明了两个 classes,一个是另一个的友元:
==>第一个 class 创建一个散列 table 并用给定文件中的单词填充它。
#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;
}
};
在第二个 class 中,我想从第一个 class 创建一个对象并对其进行操作,首先在创建的对象中填充散列 table 然后删除所有认为重复的单词(如果 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' does not name a type)
如果可能的话,请告诉我如何或一些我可以了解它的资源。如果不可能,那么一些提示将是一件好事,谢谢。
("I use 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.
中
这些是我的两个 C++ 头文件中的代码,我在其中声明了两个 classes,一个是另一个的友元:
==>第一个 class 创建一个散列 table 并用给定文件中的单词填充它。
#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;
}
};
在第二个 class 中,我想从第一个 class 创建一个对象并对其进行操作,首先在创建的对象中填充散列 table 然后删除所有认为重复的单词(如果 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' does not name a type) 如果可能的话,请告诉我如何或一些我可以了解它的资源。如果不可能,那么一些提示将是一件好事,谢谢。
("I use 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.
中