C++ 函数调用给出的错误表达式必须具有类类型
我做了一个函数调用,简单地说,就是显示我有值的列表的内容。以下是函数定义:C++ 函数调用给出的错误表达式必须具有类类型,c++,list,pointers,iterator,C++,List,Pointers,Iterator,我做了一个函数调用,简单地说,就是显示我有值的列表的内容。以下是函数定义: void display_list(list<string>*type_list) { cout << "You made a function call" << endl; for (list<string>::iterator dis = type_list.begin(); dis != type_list.end(); ++dis) {
void display_list(list<string>*type_list)
{
cout << "You made a function call" << endl;
for (list<string>::iterator dis = type_list.begin(); dis != type_list.end(); ++dis)
{
cout << *dis;
cout << "\n";
}
}
虽然一切正常,正如您所见,我添加了一个测试'cout'以确保函数调用正常工作,但它不显示内容,并且我得到一个错误,突出显示了
type_list
然后弹出一个错误,表示表达式必须具有类类型
现在,我确实将代码更改为如下所示:
void display_list(list<string>*type_list)
{
cout << "You made a function call" << endl;
list<string> gen;
*type_list = gen;
for (list<string>::iterator dis = gen.begin(); dis != gen.end(); ++dis)
{
cout << *dis;
cout << "\n";
}
}
无效显示列表(列表*类型列表)
{
cout行中:
*type_list = gen;
您正在将type_list
更改为指向gen
。请注意,gen
此时为空。
此外,稍后在for
循环中使用gen
中的迭代器,尽管其中没有任何内容
你可能想说这句话:
gen = *type_list;
gen
是不必要的,您可以直接从类型列表中获取迭代器。您需要使用->
从指针访问成员和成员函数
void display_list(list<string>*type_list)
{
cout << "You made a function call" << endl;
for (list<string>::iterator dis = type_list->begin(); dis != type_list->end(); ++dis)
{
cout << *dis;
cout << "\n";
}
}
或者(谢谢,@MattMcNabb)
list&gen=*典型列表;
我很困惑。您的函数显示列表
实际上没有任何作用
这是我对你的职能的检查
通过常量引用传递
大数据结构应通过常量引用传递,除非您计划修改它。显示函数不应修改其参数:
是:
无效显示列表(列表*类型列表)
更改为:
无效显示列表(常数列表和类型列表)
复制空列表将删除现有列表
此行创建一个名为gen
的空列表
list gen;
此行将空列表复制到传递的列表:
*type_list=gen;
迭代空列表没有任何功能
由于新创建的gen
列表为空,因此此循环没有任何功能
for (list<string>::iterator dis = gen.begin(); dis != gen.end(); ++dis)
{
cout << *dis;
cout << "\n";
}
for(列表::迭代器dis=gen.begin();dis!=gen.end();++dis)
{
cout运算符
仅用于对象。若要查找指向的对象上的成员,请编写(*ptr).name
,或等效的ptr->name
例如:
string s;
string *ptr = &s;
cout << s.size() << "\n";
cout << ptr->size() << "\n";
字符串s;
字符串*ptr=&s;
cout或list&gen=*type\u list;
list<string> gen = *typ_list;
list<string>& gen = *typ_list;
for (list<string>::iterator dis = gen.begin(); dis != gen.end(); ++dis)
{
cout << *dis;
cout << "\n";
}
void display_list(const std::list<string>& type_list)
{
std::list::const_iterator iter;
for (iter = type_list.begin();
iter != type_list.end();
++iter)
{
std::cout << *iter << "\n";
}
}
string s;
string *ptr = &s;
cout << s.size() << "\n";
cout << ptr->size() << "\n";
void display_list(list<string> &type_list)