我一直收到这个错误,
error: ‘std::string’ has no member named ‘get_name’
cout << name.get_name() << name.get_won() << name.get_lost << endl << endl;
即使'name = name_of_player;'和'cout&lt;&lt;名称;'打印正确的名称。我猜它是采取变量而不是实际的字符串?我不完全确定,因此我需要帮助。
#include <iostream>
#include <string>
using namespace std;
class person {
string name_;
int won_;
int lost_;
public:
void set_name(string);
void set_wl(int,int);
int get_won() const {return won_;}
int get_lost() const { return lost_;}
string get_name() const {return name_;}
};
void person :: set_name(string n) {
name_ = n;
}
void person :: set_wl(int x, int y) {
won_ = x; lost_ = y;
}
int number_of_players;
string name;
string name_of_player[31];
int counter;
void get_player()
{
counter = 1; //Initiating the counter
cout << endl << "Ok! Now we are going to enter their names in. " << endl;
for (int i=1; number_of_players >= i; i++)
{
cout << "Enter player #" << counter << "'s name... " << endl;
cout << "The max is 30 players... " << endl;
getline (cin, name);
cout << endl;
cout << "Okay, so player #" << counter << " is " << name << "." << endl;
cout << "Please press Enter to continue..." << endl;
cin.ignore();
name_of_player[counter] = name;
person name;
name.set_name(name_of_player[counter]);
name.set_wl(0,0);
counter = (counter + 1);
}
}
void list_players()
{
counter = 1; //initiating the counter
cout << "Here are the current players with their respective win/loss ration... " << endl << endl;
for (int i=1; number_of_players >= i; i++)
{
name = name_of_player[counter];
cout << name.get_name() << name.get_won() << name.get_lost << endl << endl;
counter = counter +1;
}
}
int main()
{
cout << "Welcome to the Chess Tournament Organizer. " << endl;
cout << "How many people will be playing today? " << endl;
cin >> number_of_players;
cin.ignore();
get_player();
list_players();
return (0);
}
person name_of_player[31];
也改变......
cout << "Enter player #" << counter << "'s name... " << endl;
cout << "The max is 30 players... " << endl;
getline (cin, name);
cout << endl;
cout << "Okay, so player #" << counter << " is " << name << "." << endl;
cout << "Please press Enter to continue..." << endl;
cin.ignore();
name_of_player[counter].set_name(name);
name_of_player[counter].set_wl(0,0);
对'list_of_players'函数执行相同的操作。
我仍然不完全确定为什么它不起作用,我想要通过使用给定名称创建的几个'人名'。因此,如果用户输入“mike”,则会有一个名为mike的人类,我可以通过输入mike.get_info()来找到人类mike的信息;
TL; DR 我需要修复范围,而不是将我的字符串作为每个人的人员类的名称运行。
答案 0 :(得分:3)
name_of_player
被定义为31 string
s:
string name_of_player[31];
当您执行以下操作时,您将从counter
枚举的数组中获取元素:
name = name_of_player[counter];
所以name
是string
。 string
没有get_name
方法。
您可能会对name
导致您在person name
中定义本地get_player
的原因感到困惑,但之后您永远不会使用本地定义的name
。
解决这个问题的一个丑陋方法是创建另一个全局,将name_of_player
声明为:
person stats_of_player[31];
然后在for
中get_player
- 循环的底部,您可以将本地声明的变量分配给全局数组:
stats_of_player[counter] = name;
然后,您可以使用stats_of_player
中的list_players
代替for
- 循环,如下所示:
for (int i=1; number_of_players >= i; i++)
{
cout << stats_of_player[i].get_name() << stats_of_player[i].get_won() << stats_of_player[i].get_lost() << endl << endl;
}
答案 1 :(得分:0)
name_of_player是字符串数组,而不是人物对象。所以你试图在字符串对象上调用get_name,这就是你得到这样的错误的原因。
答案 2 :(得分:0)
运行你的代码我得到的是std :: string没有名为get_name,get_won或get_lost的成员。这是因为您尝试在c ++字符串对象上调用这些方法,该对象没有这些方法。
此外,当你实际上是一个字符串数组时,你似乎期望name_of_player是一个玩家数组。
因为你的person类的方法是公共的而不是静态的,你需要一个person类的实例来调用这些方法(在类定义之外,例如main)。
void get_player() {
....
player p();
p.set_name("Bob");
p.get_name();
...
}