2010-04-03 4 views
1

У меня есть вектор, называемый игроками и класс под названием Player. И то, что я пытаюсь сделать, это написать:Инициализация объектов на лету

players.push_back(Player(name, Weapon(bullets))); 

Так что я хочу иметь возможность создавать игроков в цикле. Но я вижу сообщение об ошибке не говорит «нет подходящей функции для вызова игрока :: ...»

Тогда я изменил, что:

Weapon w(bullets); 
Player p(name, w); 
players.push_back(p); 

Вот мое определение игрока:

class Player { 
public: 
    Player(string &name, Weapon &weapon); 
private 
    string name; 
    Weapon weapon; 
} 

Я просто пытаюсь узнать, в чем разница между этими определениями. И это правильный способ передать объект конструктору объекта.

Примечание: Это не мои фактические определения классов. Я просто пытаюсь узнать что-то о объектно-ориентированном программировании на C++ с его кодированием. Я имею в виду, я знаю, что оружие может быть инициализирован в плеер :)

ответ

4

Изменить конструктор:

Player(const string &name, const Weapon &weapon); 

или:

Player(const string &name, Weapon weapon); 

Это не действует C++, чтобы инициализировать ссылку с временным объектом, который является то, что вы делаете, когда вы используете:

Player(name, Weapon(bullets)); 

это законно использовать const ссылка хотя.

EDIT: Вы также должны передать название в качестве ссылки const или по значению.

+1

Имя должно также быть константным (она копируется и не изменяется внутри конструктора) –

+0

@David Вы абсолютно правы. –

+0

@Andreas: Кстати, есть ли разница между этими двумя кодами выше? Я говорю о производительности. Оба они создают локальную переменную и проходят вправо? – pocoa

1

Вы передаете временный (Weapon(bullets)) на конструктор Player, который принимает Weapon &. Но так как вам не разрешено ссылаться на временное, это терпит неудачу.

Вы, тем не менее, имеете возможность сделать ссылку на временное. const. Таким образом, переобъявить ваш конструктор следующим образом:

Player(string const &name, Weapon const &weapon); 
Смежные вопросы