2017-07-12 1 views
-3

Ich versuche zu lernen, wie ich meinen Code in Header-und Quelldateien aufteilen, aber nicht verstehen, warum meine Member-Variable attackPower gilt als undefiniert.Member-Variable in Header nicht definiert

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

In Enemy.cpp, Visual Studio sagt mir

Kennung "Angriffskraft" ist nicht definiert

+3

Sie haben 2 verschiedene Feind-Klassen. – drescherjm

Antwort

1

Ihre cpp-Datei sollte nicht die gesamte Klasse neu definieren. Statt

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

sollten Sie müssen nur

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

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

Wenn Sie Implementierungen sind definieren sie nicht innerhalb einer class Definition sein sollte:

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

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

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

Eine bessere Möglichkeit, Ihre Konstruktor zu definieren ist dieses:

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

Sie sollten auch die Gewohnheit, Beflaggung Argumente wie const bekommen, wenn Sie absolut, sie müssen mutieren:

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