2013-08-31 2 views
2

Мне так плохо, что я задал этот вопрос, я знаю ответ, но я просто полностью закрываю его.C++ Значения по умолчанию

Что такое моя программа, это простая программа, которая отображает урон. Все, что мне нужно - это называть мои классы врагом и боссом с помощью функции атаки. Таким образом, в основном enemy.Attack() или вы можете позвонить так: enemy.Attack(30) и иметь внешний вид.

Вот что должно произойти:

enemy.Attack() Выход: 10

enemy.Attack(30) Выход: 30

Каждый раз, когда я пытаюсь пустую версию кронштейна, я получаю ошибку «функция не принимает 0 аргументов "

Enemy.h

class Enemy 
{ 
public: 
    Enemy(); 
    void Attack(); 

private: 
    int m_Damage; 
}; 

Enemy.cpp

#include <iostream> 

#include "enemy.h" 

Enemy::Enemy() : m_Damage(10) 
{} 

void Enemy::Attack(int damage) 
{ 
m_Damage = damage; 
std::cout << "Damage: " << m_Damage << std::endl; 
} 
+9

'void Attack (int damage = 10)' в вашей декларации. Реализация остается как есть. – WhozCraig

+0

@WhozCraig: Пожалуйста, напишите, что в ответе, поэтому вопрос появляется как «ответил». Я думаю, что даже одной линии хватит! – yzt

+0

Это действительно было бы, это исправлено полностью. Я люблю тебя прямо сейчас, и ты тоже сделал меня лицом. –

ответ

6

Предоставлять аргументы по умолчанию в вашем объявлении члена класса:

class Enemy 
{ 
public: 
    Enemy(); 
    void Attack(int damage = 10); 

private: 
    int m_Damage; 
}; 

Остальная часть вашей реализации может остаться как есть (хотя я бы по умолчанию, построить m_Damage к нулю или даже не использовать его, поскольку я не уверен, что вам это нужно в данный момент).

+2

Перегрузка тоже будет работать. Конечно, аргумент по умолчанию проще. –

+2

Yup. И перегрузки не путают ад из людей, когда они сочетаются с полиморфизмом: http://coliru.stacked-crooked.com/view?id=f53dbc2bce5580efbcdb35e41217ccbc-25dabfc2c190f5ef027f31d968947336 – sehe