dynamiczna alokacja - problem z konwersją typów

0
void Micro::grillOption()
{
    string t;
    cout << "Jesli chcesz skorzystac z grilla wpisz '1'" << endl;
    cin >> t;
    if(t=="1")
    {
        int* showPower;
        Grill *nGrill;
        nGrill=new Grill; 
        nGrill.initGrill(showPower);
    }

i nie wiedzieć czemu wyskakuje:
error: request for member 'initGrill' in 'nGrill', which is of non-class type 'Grill*'. Nie wiem już naprawdę jak to zmienić żeby odpalało initGrill z obiektu pod wskaźnikiem a nie wskaźnika :( Proszę o pomoc.

0

Nie wiem czy dobrze zrozumialem Twoja wypowiedz ale sprobuj

nGrill->initGrill(showPower);

lub

nGrill->initGrill(*showPower);

W zaleznosci od tego co chcesz osiagnac. Tak sie sklada, ze showPower jest niezainicjalizowanym wskaznikiem i cos z tym musisz zrobic - pytanie tylko co Ty wlasciwie kombinujesz?

0

Dzięki . Tutaj pomogło, ale pojawił się podobny problem dalej... nie wiem gdzie jest mój problem w rozumowaniu.
mikro.h

#ifndef MIKRO_H
#define MIKRO_H
#include <iostream>
#include <string>

using namespace std;

class Micro{
private:
        string name;
		int power;
public:
	static int amount;
    Micro();
    ~Micro();
    void init();
    void addName();
    void grillOption();
    void createDoor();
};

class Door{
private:
    Door(Door& d1);
    bool position;
public:
    Door();
    ~Door();
    void choosePosition();
};

class Grill{
private:
    int* Heat;
public:
    Grill();
    ~Grill();
    void initGrill(const int powerX);
    //Grill& operator+(const int* addHeat);
   // Grill& operator-(const int* minusHeat);
};

#endif

mikro.cc:

 #include <iostream>
#include <string>
#include "mikro.h"

using namespace std;
int Micro::amount=0;
//KONSTRUKTORY - MICRO
;
Micro::Micro()
{
    #ifdef TESTPR1
    cout << "konstruktor Micro dziala" << endl;
    #endif
    name = "";
    power = 100;
    amount++;
}

Micro::~Micro()
{
    #ifdef TESTPR1
    cout << "destruktor Micro dziala" << endl;
    #endif
    name = "";
    power = 0;
	amount--;

}

//FUNKJE - MICRO

void Micro::init()
{
    this->addName();
    this->grillOption();
    this->createDoor();
}

void Micro::addName()
{
    cout<<"Podaj nazwe modelu mikrofalowki"<< endl;
    cin>> name;
}

void Micro::grillOption()
{
    string t;
    cout << "Jesli chcesz skorzystac z grilla wpisz '1'" << endl;
    cin >> t;
    if(t=="1")
    {
        int showPower;
        Grill *nGrill;
        nGrill=new Grill; cout << "doopa";
        nGrill->initGrill(showPower); cout << "doopa";
    }cout << "doopa";
}

void Micro::createDoor()
{
    Door* nDoor;
    nDoor=new Door;cout << "jestem";
    nDoor->choosePosition(); cout << "jestem123";
}

//KONSTRUKTORY - GRILL
Grill::Grill()
{
	    #ifdef TESTPR1
    cout << "konstruktor Grill dziala" << endl;
    #endif
    Heat=0;
}
/*
 Grill& Grill::operator+(const int* addHeat)
 {
     *Heat = *Heat + 150;
 }

  Grill& Grill::operator-(const int* minusHeat)
 {
     Heat = Heat - 150;
 }

 */
Grill::~Grill()
{
    #ifdef TESTPR1
    cout << "destruktor Grill dziala" << endl;
    #endif
    Heat=0;

}

void Grill::initGrill(const int powerX)
{
    this->Heat = powerX + 200; cout << "dsajsad"<<endl;
}

//wsk=&n;
//*wsk=0;
//DOOR
Door::Door()
{
    #ifdef TESTPR1
    cout << "konstruktor Door dziala" << endl;
    #endif
    position=false;
}

Door::~Door()
{
    #ifdef TESTPR1
    cout << "destruktor Door dziala" << endl;
    #endif
    position=false;
}

void Door::choosePosition()
{
    string k = "";
    while(k!="0")
    {
        cout << "Chcesz zamknac drzwi?" << endl;
        cin >> k;
        //jesli nie zamknie, badz wpisze cos innego, program czeka, a¿ u¿ytkownik siê zgodzi :-)
    }
    position=true;
}

main.cc

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

using namespace std;

int main()
{

    Micro Example1;
    Example1.init();
}
0

w mikro.cc wyskakuje błąd w void Grill::initGrill(const int powerX) o treści znowu invalid conversion from 'int' to 'int*'

0

Nic dziwnego bo:
int* Heat;
Heat - jest wskaźnikiem, nie wiem po kiego.

0

w tym zadaniu klasa Grill musi byc dynamiczna więc chyba Heat musi byc wskaznikiem...chyba

0

Ze co? Grill posiada całą listę temperatur? I wszystkie ma jednocześnie? Sorki ale takiego jeszcze nie widziałem.

0

w zadaniu klasa automatyczna mają być Door a automatyczny Grill. To jaka będzie pomiędzy nimi różnica jeśli Grill nie będzie robiony na wskaźnikach?

0

D:D
grill - dynamiczny
door - statyczny
już zaczyna mi się wszystko mieszać :P

0

To dodaj sobie np historię stanów.

0

czy to spowoduje, ze bedzie ona dynamiczna? to chyba będzie tylko po prostu historia stanów . Czy może samo to, że nie jest zawsze jej instancja tworzona wystarczy by ją nazwać dynamiczną?

0

Dynamiczna - czyli przydziela sobie pamięć. Zrób tam listę jednokierunkową ze wskaźnikami na początek i na koniec. Przy każdej zmianie stanu dodajesz dodatkowy element do listy.

0

nie miałem jeszcze tego na programowaniu :( zresztą mamy zakaz nie korzystania z "bardziej skomplikowanych " rzeczy do tego zadania. To może inaczej:

 void Grill::initGrill(const int powerX)
{
    this->Heat = powerX + 200; cout << "dsajsad"<<endl;
}

jak w tej chwili napisac to tak, aby wartosc ktora jest zapisana pod wskaznikiem Heat przyjmowa tą sumę** powerX + 200**?

0

if(!Heat) Heat = new int;
*Heat=powerX + 200;

1 użytkowników online, w tym zalogowanych: 0, gości: 1