Microsofts VS 2019, похоже, не распознает мой конструктор для "Lebensmittel", в то время как все другие идеи распознают, черт возьми, даже онлайн-идеи не имеют с этим проблем. Есть ли способ выключить это или заставить VS запустить его?
То, что вы видите здесь, является решением для упражнения по кодированию, которое я выполняю прямо сейчас. Как видите, некоторые переменные написаны на немецком языке, приношу свои извинения. Программа - это упражнение по наследству. Подклассы «Lebensmittel» (еда) и «Möbel» (мебель) произошли от класса «Artikel» (товары). У еды есть срок годности (haltbarkeit), который также указан в конструкторе (int haltb), но по какой-то досадной причине VS2019 не распознает параметр int в списке параметров моего конструктора и отказывается запускать код.
#include <iostream> // Praeprozessoranweisung
using namespace std;
// Klassendefinition:
class Artikel
{
// Attribute der Basisklasse muessen als "protected" deklariert werden, damit die abgeleiteten Klassen damit arbeiten koennen
protected:
char bezeichnung[20];
int menge;
double preis;
public:
Artikel(char* bez, double p);
void einkaufen(int anzahl);
void verkaufen(int anzahl);
};
// Neue Klassendefinitionen
class Lebensmittel:public Artikel
{
private:
int haltbarkeit;
public:
Lebensmittel(int hatb, char* bez, double p);
void preis_neu();
};
class Moebel:public Artikel
{
public:
Moebel(char* bez, double p);
void preis_neu();
};
// H A U P T F U N K T I O N
int main()
{
// Ein Objekt fuer einen Artikel instanziieren
Lebensmittel bananen(2, "Bananen", 0.75);
// Bananen kaufen
bananen.einkaufen(2500);
// Bananen verkaufen
bananen.preis_neu();
bananen.verkaufen(175);
// Ein Objekt fuer einen weiteren Artikel instanziieren
Moebel schraenke("Schraenke", 250.0);
// Schraenke einkaufen
schraenke.einkaufen(150);
// Schraenke verkaufen
schraenke.preis_neu();
schraenke.verkaufen(25);
return 0;
}
// M E T H O D E N D E F I N I T I O N E N
// Konstruktor
Artikel::Artikel(char* bez, double p)
{
// Speicherueberlauf vermeiden: Letztes Element auf "Stringende" setzen:
bezeichnung[19] = '\0';
// Nur Elemente 1 bis 19 uebertragen:
for (int i = 0; i < 19; i++)
{
bezeichnung[i] = bez[i];
}
preis = p;
menge = 0;
}
void Artikel::einkaufen(int anzahl)
{
menge += anzahl;
double kosten = preis * anzahl;
// Ausgabe
cout << endl;
cout << "Der Einkauf von " << anzahl << " " << bezeichnung << " kostet Sie " << kosten << " Euro." << endl;
cout << "(Einzelpreis: " << preis << " Euro.)" << endl;
cout << "Sie haben jetzt " << menge << " " << bezeichnung << "." << endl;
}
void Artikel::verkaufen(int anzahl)
{
// Vermeiden, dass mehr verkauft wird, als vorhanden ist
if (anzahl > menge) anzahl = menge;
menge -= anzahl;
double kosten = preis * anzahl;
// Ausgabe
cout << endl;
cout << "Der Verkauf von " << anzahl << " " << bezeichnung << " bringt Ihnen " << kosten << " Euro." << endl;
cout << "(Einzelpreis: " << preis << " Euro.)" << endl;
cout << "Sie haben jetzt " << menge << " " << bezeichnung << "." << endl;
}
// Neue Methoden fuer abgeleitete Klassen
// Konstruktoren
Lebensmittel::Lebensmittel(int haltb, char* bez, double p):Artikel(bez, p)
{
haltbarkeit = haltb;
}
Moebel::Moebel(char*bez, double p):Artikel(bez, p)
{}
void Lebensmittel::preis_neu()
{
if (haltbarkeit < 3) preis = 0.5 * preis;
}
void Moebel::preis_neu()
{
if (menge > 130) preis = 0.75 * preis;
}