我得到一个与insert函数一起使用的create函数的编译错误。虽然当我在if子句中执行不同的调用时它会工作,但我想将它移动到单独的create函数中。关于我得到的编译错误的任何帮助表示赞赏
| 76 |错误:无法在赋值中转换list_link*' to
sorted_list :: list_link *'|
头文件
class sorted_list
{
public:
sorted_list(); // Constructor declaration
~sorted_list(); // Destructor declaration
void insert(int key, double value);
void print();
private:
class list_link
{
// Declarations
public:
my_key_type key;
my_value_type value;
list_link *next;
};
list_link* first;
};
功能
void sorted_list::insert(int key, double value)
{
list_link *curr, *prev;
curr = first;
while(curr)
{
prev = curr;
curr = curr->next;
}
if(first == 0 || prev == 0) //if empty or add first
{
cout << "empty list" << endl;
list_link *new_link = new list_link;
new_link->key = key;
new_link->value = value;
new_link->next = 0;
first = new_link;
}
else
{
cout << "add" << endl;
prev->next = create(key, value, 0);
}
}
创建功能
list_link* create(my_key_type key, my_value_type value, list_link* next)
{
// creates the node;
list_link *new_link = new list_link;
// add values to the node;
new_link->key = key;
new_link->value = value;
new_link->next = next;
return new_link;
}
答案 0 :(得分:1)
班级list_link
是:
sorted_list
private
为了让一个独立的函数创建一个这种类型的对象,你需要将类型设为public,你还需要在它前面添加sorted_list::
,否则你需要在外面声明它sorted_list
类的。{我应该补充一点,你使用list_link
作为一个简单的数据对象,没有方法,字段是公共的,所以 - 从纯粹的文体角度来看 - 我建议将其声明为{{1}而不是一个类,这也消除了公共的需要。
答案 1 :(得分:0)
我不是C ++的权威,但我认为问题在于你采用的方式。
list_link
类是私有的。我建议将其公开,因为类只是可以创建对象实例的蓝图。您可以保密的是指向链接列表的实际指针list_link *first
。
由于list_link
类嵌套在sorted_list
类下,因此每次尝试访问sorted_list
类时都必须通过list_link
范围
尝试这个来解决问题:
class sorted_list
{
public:
sorted_list(); // Constructor declaration
~sorted_list(); // Destructor declaration
void insert(int key, double value);
void print();
class list_link
{
// Declarations
public:
my_key_type key;
my_value_type value;
list_link *next;
};
private:
list_link* first;
};
sorted_list::list_link* create(my_key_type key, my_value_type value, sorted_list::list_link* next)
{
// creates the node;
sorted_list::list_link *new_link = new sorted_list::list_link;
// add values to the node;
new_link->key = key;
new_link->value = value;
new_link->next = next;
return new_link;
}
void sorted_list::insert(int key, double value)
{
list_link *curr, *prev;
curr = first;
while(curr)
{
prev = curr;
curr = curr->next;
}
if(first == 0 || prev == 0) //if empty or add first
{
cout << "empty list" << endl;
list_link *new_link = new list_link;
new_link->key = key;
new_link->value = value;
new_link->next = 0;
first = new_link;
}
else
{
cout << "add" << endl;
prev->next = create(key, value, 0);
}
}
希望这会有所帮助。 欢呼声。