错误:';std::uu cxx11::列表<;用户>;::迭代器';{aka';struct std::_List_iterator<;User>;';}没有名为XXX的成员 我正在学习C++,但我的第一堂课出错了。我需要帮助来理解这段代码的错误
我收到以下错误消息:错误:';std::uu cxx11::列表<;用户>;::迭代器';{aka';struct std::_List_iterator<;User>;';}没有名为XXX的成员 我正在学习C++,但我的第一堂课出错了。我需要帮助来理解这段代码的错误,c++,C++,我收到以下错误消息: main.cpp:36:13: error: 'std::__cxx11::list<User>::iterator' {aka 'struct std::_List_iterator<User>'} has no member named 'printInfo' usr.printInfo(); ^~~~~~~~~ 类用户: class User { string name; publ
main.cpp:36:13: error: 'std::__cxx11::list<User>::iterator' {aka 'struct std::_List_iterator<User>'} has no member named
'printInfo'
usr.printInfo();
^~~~~~~~~
类用户
:
class User {
string name;
public:
User();
void set_name (string in_name);
string get_name();
void printInfo();
};
User::User() { name="Unkonw"; }
void User::set_name(string in_name) { name = in_name; }
string User::get_name() { return name; }
void User::printInfo() { cout<<name; }
struct usrs { User usr0, usr1; };
usrs create_2user() {
User array_usr[2];
string str0;
for(int i=0;i<2;i++) {
cout<<"Enter player "<<i<<"'s name: ";
cin>>str0;
array_usr[i].set_name(str0);
}
usrs result = { array_usr[0], array_usr[1] };
return result;
}
类用户{
字符串名;
公众:
用户();
void set_name(_name中的字符串);
字符串get_name();
void printInfo();
};
User::User(){name=“Unkonw”;}
void User::set_name(_name中的字符串){name=in_name;}
字符串用户::get_name(){return name;}
void User::printInfo(){cout您试图在迭代器上调用成员函数printInfo
,将其调用到播放器实例,而不是用户实例。您可以通过
for( list<User>::iterator usr = playerList.begin(); usr != playerList.end(); usr++) {
usr->printInfo();
}
如果您想对其进行过度设计,还可以开始学习
标题和
#include <algorithm>
std::for_each(playerList.cbegin(), playerList.cend(),
std::mem_fn(&User::printInfo));
请注意,由于printInfo()
不会改变对象的任何状态,因此应标记此成员函数const
,并使用const\u迭代器
,在循环的范围内,for(const User&usr:playerList)
和算法调用cbegin()/cend()
您尝试在迭代器上调用成员函数printInfo
,调用的是播放器实例,而不是用户实例。您可以通过
for( list<User>::iterator usr = playerList.begin(); usr != playerList.end(); usr++) {
usr->printInfo();
}
如果您想对其进行过度设计,还可以开始学习
标题和
#include <algorithm>
std::for_each(playerList.cbegin(), playerList.cend(),
std::mem_fn(&User::printInfo));
请注意,由于printInfo()
不会改变对象的任何状态,因此应标记此成员函数const
,并使用const\u迭代器
,在循环的范围内,for(const User&usr:playerList)
和算法调用cbegin()/cend()<代码> >:>代码> >列表:迭代器UR < /C> >声明<代码> UR >是迭代器。在C++中,迭代器是一个类似于一般指针的对象,指向另一个对象(1)。。因此,必须将其视为指针:如果要访问指向的对象,必须使用*
(访问对象)或->
(访问对象的成员)取消迭代器的引用。因此,将for
循环体中的语句更改为:
usr->printInfo();
(1)不同点是指针指向一个地址,而迭代器指向容器中的一个位置。
< P>::代码> UR >代码>声明<代码> UR < /C> >是迭代器。在C++中,迭代器是一个类似于一般指针的对象——指向另一个对象的对象(1)。。因此,必须将其视为指针:如果要访问指向的对象,必须使用*
(访问对象)或->
(访问对象的成员)取消迭代器的引用。因此,将for
循环体中的语句更改为:
usr->printInfo();
(1) 不同之处在于指针指向一个地址,而迭代器指向容器中的一个位置。usr->printInfo()包含源文件的可能重复通常是一个坏主意。您可以作弊并简单地将其重命名为User.h
,尽管将所有内容都放在标题中也不好usr->printInfo()包含源文件的可能重复通常是一个坏主意。你可以作弊并简单地将其重命名为User.h
,尽管将所有内容都放在标题中也不好