Kezdőoldal » Számítástechnika » Programozás » Hol van a hiba ebben a Visual...

Amanda88 kérdése:

Hol van a hiba ebben a Visual C++ programban?

Figyelt kérdés

Leltárt kell készítenem. A feladatnak az a része, ahol elakadtam:

Hozzon létre konkrét osztálypéldányokat néhány különböző áruból és a rá mutató pointereket helyezze el egy tömbben, amely ősosztály típusú osztályra mutató pointereket tartalmaz, majd ezt felhasználva írassa ki az összes áruról a részletes információkat és számítsa ki a kisbolt teljes árukészletének értékét!


A program:


Aru.h:


#include <iostream>

#pragma once


class Aru

{

public:

int kod;

void Kiir();

};


Gyulocs.h:


#include <iostream>

#include "Aru.h"

#pragma once


class Gyumolcs: public Aru

{

public:

bool friss;

int kiloAr;

int keszletKilo;

void Kiir();

};


Ital.h:


#include <iostream>

#include "Aru.h"

#pragma once


enum Kiszereles: int

{

FelLiter,

EgyLiter,

KetLiter

};


class Ital: public Aru

{

public:

Kiszereles kiszereles;

int darab;

int felAr;

int egyAr;

int kettoAr;

int ar;

void Kiir();

};


Aru.cpp:


#include <iostream>

using namespace std;

#include "Aru.h"


void Gyumolcs::Kiir()

{

};


Gyumolcs.cpp:


#include <iostream>

using namespace std;

#include "Gyumolcs.h"


void Gyumolcs::Kiir()

{

if (friss=true)

{ cout<<"A gyumolcs friss"<<endl; }


else if (friss=false)

{ cout<<"A gyumolcs nem friss"<<endl; }


cout<<"A gyumolcs "<<kiloAr<<" kg"<<endl;


};


Ital.cpp:


#include <iostream>

using namespace std;

#include "Ital.h"


void Ital::Kiir()

{

cout<<"Az ital kiszerelese: "<<kiszereles<<endl;

cout<<"Az italból készleten van: "<<darab<<" darab."<<endl;


if (kiszereles=FelLiter)

{

cout<<"Egy ital ara: "<<felAr<<endl;

}


else if (kiszereles=EgyLiter)

{

cout<<"Egy ital ara: "<<egyAr<<endl;

}


else if(kiszereles=KetLiter)

{

cout<<"Egy ital ara: "<<kettoAr<<endl;

}


else

{

cout<<"Az ital ara hibasan lett megadva."<<endl;

}

};


Raktar.cpp:


#include <iostream>

using namespace std;

#include "Aru.h"

#include "Gyumolcs.h"

#include "Ital.h"


int main()

{

Gyumolcs *korte;

Gyumolcs *alma;

Ital *kola;

Ital *asvanyviz;


(*korte).kod= 12354

(*korte).friss= true;

(*korte).kiloAr= 380;

(*korte).keszletKilo= 12;


Aru tomb[4]= new Aru();

tomb[4]= {korte, alma, kola, asvanyviz};


system("pause");

return 0;

}


Hibák:


error C2064: term does not evaluate to a function taking 1 arguments


error C2228: left of '.friss' must have class/struct/union


error C2440: 'initializing' : cannot convert from 'Aru *' to 'Aru [4]


error C2143: syntax error : missing ';' before '{'



2013. okt. 10. 21:45
 1/6 anonim ***** válasza:

Mégis melyik sorban és hanyadik karakternél jelzi a hibákat? Ez fontos aspektusa a debuggolásnak.


error C2064: term does not evaluate to a function taking 1 arguments


Nincs ilyen függvény deklarálva. Nincs ilyen függvény 1 paraméterrel deklarálva. Elfelejtetted előre deklarálni vagy nem includeoltad be a header fájlt.


error C2228: left of '.friss' must have class/struct/union


Hol? Mellegleg ne így használd (*korte).friss hanem korte->friss


error C2440: 'initializing' : cannot convert from 'Aru *' to 'Aru [4]


Aru tomb[4]= new Aru();

tomb[4]= {korte, alma, kola, asvanyviz};


Ez így hülyeség. Aru *tomb = new Aru[4] és aztán lehet feltölteni. Ne felejtsd el utána felszabadítani.


error C2143: syntax error : missing ';' before '{'


Ezt csak te tudhatod. Ilyen indentálás mellett ne várd, hogy megtaláljam ezt az elírást.

2013. okt. 10. 22:42
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

Köszi, átírtam a Aru tomb[4]-t és a (*korte).-t, ahogy írtad. Most már csak azt jelzi hibának a korte->kod= 12354; és az alatta lévő 3 sorra, hogy:

warning C4700: uninitialized local variable 'korte' used.

Definiáltam mindhárom osztályban constructort, destructort, inicializáltam bennük az osztályok változóit, de így is ugyanezt a hibaüzenetet írja ki. Vajon miért?

2013. okt. 11. 00:05
 3/6 A kérdező kommentje:
Most látom, hogy ugyanezt a hibaüzenetet adja a alma, kola, asvanyviz objektumokra is. Pedig elvileg mindegyiknek van constructora, destructora.
2013. okt. 11. 00:07
 4/6 anonim ***** válasza:

Igen van neki. De! Mivel nem példányokat hoztál létre, csak helyet számukra. Mikor mutatót hozol létre, csak megmondod, hogy majd lesz egy ilyen objektumunk. Kell neki a new, majd a delete a végén. De ha jobban szereted a malloc-t, az is mehet.


Gyumolcs *korte = new Gyumolcs, *alma = new Gyumolcs;

Ital *kola = new Ital, *asvanyviz = new Ital;

2013. okt. 11. 01:01
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
Köszönöm!
2013. okt. 12. 13:25
 6/6 A kérdező kommentje:

Hogyan tudnám kiíratni a Raktar.cpp-ben létrehozott Aru *tomb= new Aru[4]; tömb segítségével az egyes objektumok paramétereit? Ez így nem működik:


Ital.cpp:


void Ital::Kiir(Aru tomb[])

{

for (int i=0; i<4; i++)

{

cout<<"A(z) "<<i<<". ital kiszerelese: "<<tomb[2]->kiszereles<<endl;

}


Error C2819: type 'Aru' does not have an overloaded member 'operator ->'


Error C2039: 'kiszereles' : is not a member of 'Aru'

2013. okt. 12. 13:49

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!