Как исправить баги?
Вот мой код:
#include <iostream>
struct player{
public:
char *name;
player* next;
player(player&,char *);
player* getnext();
~player();
};
player::player(player& next_,char *nm){
name = nm;
next = &next_;
};
player* player::getnext(){
return next;
};
player::~player(){
delete name;
delete next;
};
struct lobby{
public:
player* first;
player* last;
lobby(player&);
void delfirst();
void addlast(char*);
~lobby();
};
lobby::lobby(player& waiting){
first = &waiting;
last = &waiting;
};
void lobby::delfirst(){
if(first == last){
std::cout << "\n";
}else{
player* p = last;
player* p_pr;
while (p != first){
p_pr = p;
p = (*p).getnext();
};
std::cout << p <<"\n";
delete p;
first = p_pr;
delete p_pr;
};
};
void lobby::addlast(char *name){
player p((&(*last)),name);
last = &p;
}
lobby::~lobby(){
delete first;
delete last;
};
int main(){
std::cout << "Good";
return 0;
А вот баги:
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp: In member function 'void lobby::addlast(char*)':
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp:51:26: error: no matching function for call to 'player::player(player*, char*&)'
51 | player p((&(*last)),name);
| ^
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp:10:1: note: candidate: 'player::player(player&, char*)'
10 | player::player(player& next_,char *nm){
| ^~~~~~
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp:10:24: note: no known conversion for argument 1 from 'player*' to 'player&'
10 | player::player(player& next_,char *nm){
| ~~~~~~~~^~~~~
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp:2:8: note: candidate: 'constexpr player::player(const player&)'
2 | struct player{
| ^~~~~~
C:/Users/1234/AppData/Local/Temp/CP Editor-xqwETs/sol.cpp:2:8: note: candidate expects 1 argument, 2 provided
]
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Это не баги, а синтаксические ошибки :)
player p((&(*last)),name);
Что такое last?
player* last;
Значит, тип *last — player&.
Тип &(*last), соответственно, player*.
У вас же конструктор описан как
player::player(player& next_,char *nm){
Т.е. нужна ссылка, вы передаете указатель... Вот и все.
P.S. Что-то мне кажется, что в этом коде это не последняя ошибка, но это уже другой вопрос...