Primmer 5th Edition Probleme
-
Hallo,
Ich hab angefangen den Primer durch zu arbeiten ich hab aber ein Problem.
Ich soll ne Header Datei aus dem Internet benutzen. Hab auch alles soweit hinbekommen ich bekomm aber ne Fehlermeldung.
#include <iostream> #include "Sales_item.h" int main() { Sales_item item1, item2; std:: cin >> item1 >> item2; if(item1.isbn() == item2.isbn()){ std::cout << item1 + item2 << std::endl; return 0} else { std::cerr << "ISBN-Nummern stimmen nicht überein!" << std::endl; return -1; } }Das is der code steht auch genau so im buch.
Hier is die Header Datei
/* * This file contains code from "C++ Primer, Fourth Edition", by Stanley B. * Lippman, Jose Lajoie, and Barbara E. Moo, and is covered under the * copyright and warranty notices given in that book: * * "Copyright (c) 2005 by Objectwrite, Inc., Jose Lajoie, and Barbara E. Moo." * * * "The authors and publisher have taken care in the preparation of this book, * but make no expressed or implied warranty of any kind and assume no * responsibility for errors or omissions. No liability is assumed for * incidental or consequential damages in connection with or arising out of the * use of the information or programs contained herein." * * Permission is granted for this code to be used for educational purposes in * association with the book, given proper citation if and when posted or * reproduced.Any commercial use of this code requires the explicit written * permission of the publisher, Addison-Wesley Professional, a division of * Pearson Education, Inc. Send your request for permission, stating clearly * what code you would like to use, and in what specific way, to the following * address: * * Pearson Education, Inc. * Rights and Contracts Department * 75 Arlington Street, Suite 300 * Boston, MA 02216 * Fax: (617) 848-7047 */ #ifndef SALESITEM_H #define SALESITEM_H // Definition of Sales_item class and related functions goes here // NB: when prepare this file for the code directory on the web, // be sure all operations are defined as inlines within the // header so that user code can use the operations without // needing to compile and use a corresponding .cc file #include <iostream> #include <string> class Sales_item { friend bool operator==(const Sales_item&, const Sales_item&); friend std::istream& operator>>(std::istream&, Sales_item&); friend std::ostream& operator<<(std::ostream&, const Sales_item&); // other members as before public: // added constructors to initialize from a string or an istream Sales_item(const std::string &book): isbn(book), units_sold(0), revenue(0.0) { } Sales_item(std::istream &is) { is >> *this; } public: // operations on Sales_item objects // member binary operator: left-hand operand bound to implicit this pointer Sales_item& operator+=(const Sales_item&); // other members as before public: // operations on Sales_item objects double avg_price() const; bool same_isbn(const Sales_item &rhs) const { return isbn == rhs.isbn; } // default constructor needed to initialize members of built-in type Sales_item(): units_sold(0), revenue(0.0) { } // private members as before private: std::string isbn; unsigned units_sold; double revenue; }; // nonmember binary operator: must declare a parameter for each operand Sales_item operator+(const Sales_item&, const Sales_item&); inline bool operator==(const Sales_item &lhs, const Sales_item &rhs) { return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs); } inline bool operator!=(const Sales_item &lhs, const Sales_item &rhs) { return !(lhs == rhs); // != defined in terms of operator== } #endifUnd hier die Fehlermeldung
g++.exe -Wall -fexceptions -g -std=c++11 -c H:\projekte\Sales\main.cpp -o obj\Debug\main.o
In file included from H:\projekte\Sales\main.cpp:2:0:
h:\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/Sales_item.h: In function 'int main()':
h:\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/Sales_item.h:68:17: error: 'std::string Sales_item::isbn' is private
H:\projekte\Sales\main.cpp:13:14: error: within this context
H:\projekte\Sales\main.cpp:13:19: error: no match for call to '(std::string {aka std::basic_string<char>}) ()'
In file included from H:\projekte\Sales\main.cpp:2:0:
h:\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/Sales_item.h:68:17: error: 'std::string Sales_item::isbn' is private
H:\projekte\Sales\main.cpp:13:30: error: within this context
H:\projekte\Sales\main.cpp:13:35: error: no match for call to '(std::string {aka std::basic_string<char>}) ()'
H:\projekte\Sales\main.cpp:15:17: error: expected ';' before '}' token
Process terminated with status 1 (0 minutes, 2 seconds)
7 errors, 0 warnings (0 minutes, 2 seconds)Also ich glaub es liegt daran das ISBN Private is aber keine Ahnung was ich machen soll. hab alles so gemacht wies im buch steht. hat jemand nen rat?
beste grüße
-
Moin!
Falscher Download?
Da steht ja "This file contains code from "C++ Primer, Fourth Edition".Ich habe eben den Download für den gcc runtergeladen:
http://www.informit.com/store/c-plus-plus-primer-9780321714114
Und dort ist eine andere Sales_item.h drin. Nämlich für die fünfte Ausgabe.Viel Erfolg.
-
Du hast vollkommen recht, es liegt daran, dass
isbnprivate ist und du von aussen keinen Zugriff darauf hast. Andererseits bietet die KlasseSalesItemdie Methodesame_isbnan, die zwei SalesItems vergleicht. Die Korrekur deines Quelltextes sieht so aus, dass du... if(item1.isbn() == item2.isbn()) ...durch
... if(item1.same_isbn( item2 ) ) ...ersetzt.
-
Danke Furble das war der Fehler

Danke auch an Doc
Grüße