我遇到了问题,我很乐意提供帮助。
我有一个班主任:
class Player{
public:
char Name[20];
Dice* dice;
int points;
Player(char name[20], Dice* dice){//constructor
for (int i = 0; i < 20; i++)
Name[i] = name[i];
points = 0;
}
在我的主要版本中我尝试:
Player* p1("aaa",d1);
Player* p2("ddd",d2);
错误:
error a value of type const char * cannot be used to initialize an entity of
type "Player*"
它只是代码的一部分,但除了这个代码之外,所有其余代码都很好。
感谢的。
答案 0 :(得分:2)
第1步:修复
Player* p1
是指向Player
对象的指针,您需要指向一个对象:
Player playerP1("aaa",d1);
Player* p1(&playerP1);
所以你有一个由playerP1
p1
同意p2
;
第2步:去亲
您还可以使用std::make_unique
或std::make_shared
auto p1 = std::make_shared<Player>("aaa",d1);
所以你使用智能指针的好处,避免使用new
和裸新(现在不推荐使用)。
答案 1 :(得分:1)
您可以使用new
动态构造对象并分配给指针:
Player *p1 = new Player("aaa", d1);
您还应该将构造函数更改为const char name[]
。否则,您不能使用字符串文字作为参数。
从name
复制到Name
的循环需要检查空字节,否则您将读取"aaa"
的结尾。
Player(const char name[], Dice* dice){//constructor
for (int i = 0; i < sizeof(Name); i++) {
Name[i] = name[i];
if (name[i] == 0) {
break;
}
}
points = 0;
}
如果您使用std::string
而不是固定长度的char
数组,那可能会更好。
=== phonetagger添加的示例... === (当Barmar发布这个答案时,我正在努力回答。)
#include <string>
class Player
{
public:
std::string Name;
Dice* dice;
int points;
//constructor
Player(std::string name, Dice* dice)
: Name(name), dice(dice), points(0)
{
}
};
int main()
{
Dice *d1 = new Dice();
Player* p1 = new Player("aaa", d1);
Player* p2 = new Player("ddd", d1);
}
答案 2 :(得分:-2)
将构造函数更改为
Player(const char *name, Dice* dice)