C++ 我试图创建一个类向量,然后用for循环命名每个类
我对这个很陌生。我们将非常感谢您的帮助。 我试图创建类对象的向量,然后用for循环命名每个对象。我得到了错误c2679:在第35行没有找到二进制'>>'运算符,该运算符接受类型为“重载函数”的右操作数。cin>>play.p_名称。请帮忙C++ 我试图创建一个类向量,然后用for循环命名每个类,c++,loops,vector,std,C++,Loops,Vector,Std,我对这个很陌生。我们将非常感谢您的帮助。 我试图创建类对象的向量,然后用for循环命名每个对象。我得到了错误c2679:在第35行没有找到二进制'>>'运算符,该运算符接受类型为“重载函数”的右操作数。cin>>play.p_名称。请帮忙 #include <iostream> #include <string> #include <vector> using namespace std; class Player { private: string
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Player
{
private:
string player_name;
int score[18];
public:
void p_name(string);
void Player::p_name();
};
void Player::p_name(string name)
{
player_name = name;
}
int main()
{
int num_players = 0;
int i = 0;
int j = 0;
cout << "Please enter number of players.\n";
cin >> num_players;
vector<Player>player_vector;
for (int i = 0; i < num_players ; ++i)
{
Player play;
player_vector.push_back(play);
for (int j = 0; j < num_players; j++)
{
cout << "What is the name of Player " << j << ": ";
cin >> play.p_name;
}
}
system("PAUSE");
return 0;
}
#包括
#包括
#包括
使用名称空间std;
职业选手
{
私人:
弦乐演奏者的名字;
积分[18];
公众:
无效p_名称(字符串);
无效玩家::p_name();
};
无效播放器::p_名称(字符串名称)
{
玩家名称=姓名;
}
int main()
{
int num_players=0;
int i=0;
int j=0;
cout>num_玩家;
向量机;
对于(int i=0;i cout首先,播放。p_name
是一个函数,而不是一个变量;您不能这样分配给它。您必须使用字符串变量作为参数来调用它。您可以执行以下操作:
string name;
cin >> name;
play.p_name(name);
Second,存储名称的Player
对象不是向量中的对象
当您执行player\u vector.push\u back(play)
时,您正在将play
对象的副本放入向量中。由于play
尚未指定名称,因此向量中的副本也没有名称
稍后,您将在play
中存储名称,但这不会影响存储在向量中的名称。在循环的底部,play
将被销毁,并为下一次迭代构造一个新名称(没有名称)。因此,存储在play
中的名称将被丢弃
您应该移动player\u向量。设置播放器名称后,将_back(play)
行向下推到,以便复制具有名称的对象,而不是没有名称的对象
Third,您不需要两个嵌套的循环。提示在循环中输入姓名只意味着对于每个玩家(按i
计算),您将询问每个玩家的姓名(按j
计算)。如果有5个玩家,则会询问用户25个姓名
摆脱j
循环,在创建play
对象之后,只需在i
循环中询问玩家姓名即可
同样,您的类定义中有一个语法错误:行void Player::p_name();
应该是void p_name();
。您只使用Player::
限定符从类外部引用函数(例如,在几行之后定义函数时).在类定义中,您不必告诉编译器p_name
在Player
类中,因为编译器已经知道了这一点
最后,您不需要在main
的顶部声明int i=0
和int j=0
变量。您实际上根本没有使用这些变量,因为您在中为循环定义了新的i
和j
变量。(当然,如上所述,您根本不需要j
。首先,播放。p_name
是一个函数,而不是一个变量;您不能这样分配给它。您必须使用字符串变量作为参数调用它。您可以执行以下操作:
string name;
cin >> name;
play.p_name(name);
Second,存储名称的Player
对象不是向量中的对象
当您执行player\u vector.push\u back(play)
时,您正在将play
对象的副本放入向量中。由于play
尚未指定名称,因此向量中的副本也没有名称
稍后,您将在play
中存储名称,但这不会影响存储在向量中的名称。在循环的底部,play
将被销毁,并为下一次迭代构造一个新名称(没有名称)。因此,存储在play
中的名称将被丢弃
您应该移动player\u向量。设置播放器名称后,将_back(play)
行向下推到,以便复制具有名称的对象,而不是没有名称的对象
Third,您不需要两个嵌套的循环。提示在循环中输入姓名只意味着对于每个玩家(按i
计算),您将询问每个玩家的姓名(按j
计算)。如果有5个玩家,则会询问用户25个姓名
摆脱j
循环,在创建play
对象之后,只需在i
循环中询问玩家姓名即可
同样,您的类定义中有一个语法错误:行void Player::p_name();
应该是void p_name();
。您只使用Player::
限定符从类外部引用函数(例如,在几行之后定义函数时).在类定义中,您不必告诉编译器p_name
在Player
类中,因为编译器已经知道了这一点
最后,您不需要在main
的顶部声明int i=0
和int j=0
变量。您实际上根本没有使用这些变量,因为您在中为循环定义了新的i
和j
变量。(当然,如上所述,您根本不需要j
。首先,播放。p_name
是一个函数,而不是一个变量;您不能这样分配给它。您必须使用字符串变量作为参数调用它。您可以执行以下操作:
string name;
cin >> name;
play.p_name(name);
秒