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)