2017-07-12 17 views
-3

ヘッダーとソースファイルにコードを分割する方法を学習しようとしていますが、メンバー変数attackPowerが定義されていないと考えられる理由を理解できません。 Enemy.cpp、Visual Studioでヘッダーのメンバー変数が定義されていません

Enemy.h

#pragma once 

class Enemy{ 
protected: 
    int attackPower; 
public: 
    Enemy(); 
    void setAttackPower(int a); 
    virtual void attack() = 0; 
}; 

Enemy.cpp

#include <iostream> 
#include "Enemy.h" 

class Enemy { 
public: 
    Enemy::Enemy(){ 
     attackPower = 0; 
    } 
    void Enemy::setAttackPower(int a){ 
     attackPower = a; 
    } 
}; 

識別子 "attackPowerは"

+3

あなたは2つの異なる敵のクラスを持っています。 – drescherjm

答えて

1
未定義である私に指示

あなたのcppファイルはクラス全体を再定義すべきではありません。

#include <iostream> 
#include "Enemy.h" 

Enemy::Enemy() { 
    attackPower = 0; 
} 

void Enemy::setAttackPower(int a) { 
    attackPower = a; 
} 

あなたのコンストラクタを定義する良い方法がある:あなたがclass定義の中、彼らはすべきではないの実装を定義しているときに代わりに

class Enemy { 
public: 
    Enemy::Enemy(){ 
     attackPower = 0; 
    } 
    void Enemy::setAttackPower(int a){ 
     attackPower = a; 
    } 
}; 

のあなただけの

Enemy::Enemy(){ 
    attackPower = 0; 
} 

void Enemy::setAttackPower(int a){ 
    attackPower = a; 
} 
1

を持つべきですこれは:

Enemy::Enemy() : attackPower(0) { 
} 

あなたは絶対にそれらを変異させる必要がない限り、あなたはまた、constとして低迷引数の習慣に取得する必要があります。

void Enemy::setAttackPower(const int a) { 
    attackPower = a; 
} 
関連する問題