compiler-Fehlermeldung: privat ist in diesem Zusammenhang
Bin ich, eine Klasse zu schreiben, und wenn ich kompiliere, bekomme ich eine Fehlermeldung, die sagt, "privat ist in diesem Kontext" und ein anderer, der sagt, "ungültige Verwendung der nicht-statischen Daten-member". Aber wenn ich kommentiere alles, was vor der addShipment Funktion in meiner cpp-Datei, kompiliert er problemlos. Kann mir jemand bitte erklären, was anders ist, dass es manchmal zu einem Fehler, und manchmal nicht, und wenn die zwei verschiedenen Arten von Fehlern beziehen.
Produkt.h:
#ifndef PRODUCT_H
#define PRODUCT_H
#include <iostream>
class Product {
public:
Product(int productID, std::string productName);
std::string getDescription();
void setDescription(std::string description);
std::string getName();
int getID();
int getNumberSold();
double getTotalPaid();
int getInventoryCount();
void addShipment(int shipmentQuantity, double shipmentCost);
void reduceInventory(int purchaseQuantity);
double getPrice();
private:
int productID;
std::string name;
std::string description;
double totalPaid;
int inventoryCount;
int numSold;
};
#endif
Product.cpp:
#include <iostream>
#include "Product.h"
using namespace std;
Product::Product(int productID, string productName) {
Product::productID = productID;
Product::name = productName;
}
string Product::getDescription() {
return Product::description;
}
void Product::setDescription(string description) {
Product::description = description;
}
string Product::getName() {
return Product::name;
}
int Product::getID() {
return Product::productID;
}
int Product::getNumberSold() {
return Product::numSold;
}
double Product::getTotalPaid() {
if(Product::totalPaid < 1) {
totalPaid = 0;
}
return Product::totalPaid;
}
int Product::getInventoryCount() {
Product::inventoryCount = 0;
return Product::inventoryCount;
}
void addShipment(int shipmentQuantity, double shipmentCost) {
Product::inventoryCount = Product::inventoryCount + shipmentQuantity;
Product::totalPaid = Product::totalPaid + shipmentCost;
}
void reduceInventory(int purchaseQuantity) {
Product::inventoryCount = Product::inventoryCount - purchaseQuantity;
Product::numSold = Product::numSold + purchaseQuantity;
}
double getPrice() {
int price = (Product::totalPaid / static_cast<double>(Product::inventoryCount + Product::numSold)) * 1.25;
return price;
}
Unentgeltliche Aufnahme von
<iostream>
, noch nicht enthalten für <string>
?InformationsquelleAutor AdamK | 2017-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es vor allem 2 Probleme in Ihrem code, ersten, Sie sind verwirrend statische und nicht-statische member-Variablen und das zweite, Ihre letzten 3 Funktionen sind in der Klasse deklariert Erklärung, aber du hast nicht qualifizieren Sie sich mit
Product::
so sind Sie frei stehenden Funktionen mit dem gleichen Namen. Wenn Sie vorgesehen werden, die Definitionen der Mitglieder, qualifiziert.Fix die erste Anlaufstelle, wenn Sie haben eine Klasse wie die folgende:
Ihnen Zugriff auf die statische mit der
TypeName::MemberName
syntax:Jedoch, wenn ein Mitglied ist nicht statisch, Sie müssen eine Instanz der Klasse wird der Zugriff auf die member:
Gelten die gleichen Regeln für die member-Funktionen als auch:
Da keiner deiner member-Variablen sind statisch, Ihre Nutzung
Product::
überall ist die Ursache für den zweiten Fehler.Wenn Sie nicht sicher über die statische member - Konzept ist, ist hier zu Lesen: http://en.cppreference.com/w/cpp/language/static
InformationsquelleAutor Fatih BAKIR
"Der privaten, in diesem Kontext" - Fehler bezieht sich auf die Tatsache, dass die Funktionen
addShipment
,reduceInventory
undgetPrice
sind nicht Mitglieder oder Freunde der KlasseProduct
, so dass Sie nicht verwenden Ihre privaten Mitglieder.Die "ungültige Verwendung der nicht-statischen Daten-member" - Fehler bezieht sich auf die Tatsache, dass Sie versuchen, Zugriff auf nicht-statische Datenelemente, die von qualifizierten Sie mit der syntax
Class::member
ist, wie Sie Zugang statische Daten der Mitglieder, die gemeinsam von allen Instanzen einer Klasse. Nicht-statischen Daten-member zugegriffen werden, mithilfe der syntaxobject.member
oderpointer->member
als separate Instanzen jedes Datenelement existieren für jede Instanz einer Klasse.Und ich nehme an, du meinst die Fehler verschwinden, wenn Sie kommentieren Sie alles nach (und einschließlich) der
addShipment
Funktion, sondern als alles davor. Dies ist, weil beide Arten von Fehler beziehen sich auf code in der non-member-Funktionen.InformationsquelleAutor Joseph Thomson