Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z inicjalizacją danych składowych klasy

Ostatnio zmodyfikowano 2013-08-15 21:09
Autor Wiadomość
Lutek
Temat założony przez niniejszego użytkownika
Problem z inicjalizacją danych składowych klasy
» 2013-08-15 16:32:18
Witan,

po utworzeniu nowej klasy chciałbym nadać składowym wartości początkowe.
Plik nagłówkowy klasy wygląda tak:
C/C++
#pragma once
class fighter
{
public:
    double HP;
    double MP;
    double Attack;
    double Defense;
    void PlayerAttack();
    void PlayerBlock();
    void EnemyAttack();
    void EnemyBlock();
};
W pliku głównym tworzę obiekt tej klasy, a potem próbuję przypisać wartość do zmiennej HP:
C/C++
#include "stdafx.h"
#include "TextAndGraphics.h"
#include "fighter.h"
#include <string>
using namespace std;
string Command;
fighter Player;
Player.HP = 99.0; // linijka, po której wywala błąd

int main()
{
    //....
}
Po próbie skompilowania programu pojawia się komunikat:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2371: 'Player' : redefinition; different basic types
Nigdzie oprócz pliku głównego nie definiowałem obiektu Player, nie mam pojęcia jak z tym się uporać...

P.S. piszę w Visual 2010 Express.
P-90351
pekfos
» 2013-08-15 16:34:50
Tak się tego nie robi. Poczytaj o konstruktorach.
P-90352
kubek3898
» 2013-08-15 16:36:22
Nie możesz modyfikować prywatnych danych klasy bezpośrednio (o ile tak to się nazywa) do tego nie po za funkcją main() (choć co do tego nie jestem w 100% pewny, lecz wszędzie w przykładach oraz programach definicja obiektu jest w funkcji main())
P-90353
Lutek
Temat założony przez niniejszego użytkownika
» 2013-08-15 16:38:29
Dzięki za naprowadzenie. Własnie o konstruktorach nie doczytałem, więc moja wina. @kubek3898: Tam zawsze robiłem public, potem na chwilę zmieniłem i przy wklejaniu tutaj zapomniałem zmienić z powrotem na public. Już poprawiłem :)
P-90354
Lutek
Temat założony przez niniejszego użytkownika
» 2013-08-15 21:09:58
Już sobie poradziłem :)

Plik z definicją klasy:

C/C++
#pragma once
class fighter
{
public:
    void PlayerAttack();
    void PlayerBlock();
    void EnemyAttack();
    void EnemyBlock();
    fighter( double H, double M, double Att, double Def );
private:
    double HP;
    double MP;
    double Attack;
    double Defense;
};

fighter::fighter( double H, double M, double Att, double Def )
{
    HP = H;
    MP = M;
    Attack = Att;
    Defense = Def;
}

Plik główny:

C/C++
#include "stdafx.h"
#include "TextAndGraphics.h"
#include "fighter.h"
#include <string>
using namespace std;
string Command;
fighter Player( 99.0, 99.0, 20.0, 30.0 ), Enemy( 99.0, 99.0, 40.0, 10.0 );

int main()
{
    //...
}
P-90375
« 1 »
  Strona 1 z 1