Member 13049206 Ответов: 1

Мой класс не получает правильную информацию от другого класса


Данных.ч

#ifndef DATA_H
#define DATA_H

class Data
{
    public:
        Data();

        void newData();
        void saveData();
        void getData();
        void chgStage();
        void display();
        float getGold();
        int getLvl();
        int getStage();
        int getExp();
private:
        float gold;
        int lvl,stage,exp;
};

#endif // DATA_H


Data.cpp

#include "Data.h"
#include <iostream>
#include "Enemy.h"
#include "Level.h"
#include <fstream>
#include <string.h>
#include <windows.h>

using namespace std;


Data::Data()
{

}

void Data::newData()
{
    fstream flux("data.txt",ios::out);
    flux<<"1 "<<"1 "<<"1 "<<"0";
    flux.close();

}
void Data::saveData()
{

}
void Data::getData()
{
    fstream flux("data.txt",ios::in);
    flux>>lvl>>gold>>stage>>exp;
    flux.close();
    cout<<lvl<<" "<<gold<<" "<<exp;

}

void Data::chgStage()
{
    int temp;
    cout<<endl<<"You are currently on stage "<<stage;
    cout<<endl<<"What stage do you wish to change to?";
    cin>>temp;

    if(temp==stage)
    {
        system("CLS");
        cout<<endl<<"You are already on this stage\n";
        system("PAUSE");
    }

    else if(temp*10>lvl)
    {
        system("CLS");
        cout<<endl<<"You did not unlock that stage yet.\n";
        system("PAUSE");
    }

    else if(temp!=0)
    {
        system("CLS");
        fstream flux("data.txt",ios::out);
        flux<<lvl<<" "<<gold<<" "<<temp<<" "<<exp;
        flux.close();
        cout<<endl<<"Changed to stage "<<temp<<"\n";
        system("PAUSE");
    }
}

float Data::getGold()
{
    return gold;
}
int Data::getLvl()
{
    return lvl;
}
int Data::getStage()
{
    return stage;
}
int Data::getExp()
{
    return exp;
}

void Data::display()
{
    cout<<lvl<<" "<<gold<<" "<<exp;
}


#ifndef LEVEL_H
#define LEVEL_H

class Level
{
    public:
        Level();
        void stage1();
        void stage2();
        void stage3();
    private:
        float gold;
        int lvl,stage,exp;    

};

#endif // LEVEL_H


Level.cpp

<pre>#include "Level.h"
#include <iostream>
#include "Enemy.h"
#include "Data.h"
#include <windows.h>

using namespace std;


Level::Level()
{

}

 void Level::stage1()
 {
    
 }

 void Level::stage2()
 {

 }
 void Level::stage3()
 {

 }

Я хочу получить эти частные var из данных в частные var на уровне, чтобы использовать их там. Кроме того, это, вероятно, не лучший способ сделать это, я также был бы признателен за некоторые другие лучшие способы сделать это.

Что я уже пробовал:

Я попытался сделать объект данных в конструкторе уровня, но он не получает данные , которые хранятся в этих переменных(он показывает их так, как будто они не инициализированы), а также попытался инициализировать член, я могу получить личные данные в Main из данных, но я не могу получить данные из данных в класс уровня.

Я явно что-то упускаю

1 Ответов

Рейтинг:
4

KarstenK

Для доступа к закрытым членам, как правило, добытчик и функции установщика стандартная имплантация например, следующий код:

//in header

private: 
  int m_value;// the old hungarian code style of naming

public:
  Data(int newValue);
  int getValue();
  void setValue(int newValue);

//implementation
int Data::getValue()
{
  return m_value;
}
void Data::setValue(int newValue)
{
  m_value = newValue;
  this->m_value = newValue;//some folks like that (I am too old for it)
}
//constructor
void Data::Data(int newValue)
{
  m_value = newValue;
  this->m_value = newValue;//some folks like that (I am too old for it)
}