Miért nem működik ez a Visual C++ program?
Ez a program még nem csinál semmit, csak egy üres ablakot kéne megjelenítenie. Ha nem hozok létre objektumot, működik, nem jelez hibát. Ha viszont létrehozok egy Gyumolcs objektumot a Raktar.cpp-ban, ezt a két hibát adja:
unresolved external symbol "public: virtual void __thiscall Aru::Kiir(void)" (?Kiir@Aru@@UAEXXZ)
és
fatal error LNK1120: 1 unresolved externals
A program:
Aru.h:
#include <iostream>
#pragma once
class Aru
{
public:
int kod;
virtual void Kiir();
};
Gyumolcs.h:
#include <iostream>
#include "Aru.h"
#pragma once
class Gyumolcs: public Aru
{
public:
bool friss;
int kiloar; // 1 kg ára
int keszletkilo; // ennyi kg van készleten
void Kiir();
};
Ital.h:
#include <iostream>
#include "Aru.h"
#pragma once
enum Kiszereles: int
{
FelLiter,
EgyLiter,
KetLiter
};
class Ital: public Aru
{
public:
Kiszereles kiszereles; // 0.5 literes, 1 literes, 2 literes
int darab;
int felAr;
int egyAr;
int kettoAr;
void 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;
};
Raktar.cpp:
#include <iostream>
using namespace std;
#include "Aru.h"
#include "Gyumolcs.h"
#include "Ital.h"
int main()
{
Gyumolcs korte;
system("pause");
return 0;
}
Vajon mi lehet a gond? Próbáljuk értelmezni a hibaüzenet!
Ha viszont létrehozok egy Gyumolcs objektumot a Raktar.cpp-ban, ezt a két hibát adja:
unresolved external symbol "public: virtual void __thiscall Aru::Kiir(void)" (?Kiir@Aru@@UAEXXZ)
és
unresolved: feloldatlan
external symbol: külső szimbólum
Valaki hivatkozik az Aru::Kiir függvényre, és a linker ennek a definícióját nem találja egyik fordítási egységben sem.
Itt egy jó link a magyarázattal: [link]
Ha nem akarod egy bázisosztály függvényét kifejteni, tedd pure virtuallá, = 0 a végére.
Ez három dolgot okoz.
1. Nem lesz kötelező kifejteni a függvényt.
2. Nem lehet példányosítani az osztályt (közvetlenül).
3. A leszármazottaknak kötelező lesz felülírni a függvényt, vagy rájuk is vonatkozik ez a három.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!