Hol van a hiba ebben a Visual C++ programban?
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 '{'
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.
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?
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;
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'
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!