Как исправить баги?

Вот мой код:

#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;

Значит, тип *lastplayer&.

Тип &(*last), соответственно, player*.

У вас же конструктор описан как

player::player(player& next_,char *nm){

Т.е. нужна ссылка, вы передаете указатель... Вот и все.

P.S. Что-то мне кажется, что в этом коде это не последняя ошибка, но это уже другой вопрос...

→ Ссылка