2016-10-08 2 views
0

私はeBook Primer C++を使用していますが、私は2冊の名前の入力を取得するプログラムを作成することになっています販売数を計算し、収益/平均販売価格の合計を出力します。 プロジェクト内の新しいクラスで私に与えたコードを貼り付け、メインクラスで使用するよりも、コンパイルできませんでした(コードブロックとVS表現の両方)行う。(Primer C++ Sales_item.h)サンプルクラスをコンパイルできないようです

(これは私が自分のコードを書く前であるため、クラスやコンパイラの作成方法に問題がある可能性があります) (File> Newクラスをクリックしてクラスを作成するには - )Sales_itemそれを命名し、それは私が{唯一の空のmainメソッドを持つ空のプロジェクト}に取り組んでいるプロジェクトに関連付けたい場合、私ははいをクリックしてコードを貼り付けた私に尋ねたよりも、終了

/* 
* This file contains code from "C++ Primer, Fifth Edition", by Stanley B. 
* Lippman, Josee Lajoie, and Barbara E. Moo, and is covered under the 
* copyright and warranty notices given in that book: 
* 
* "Copyright (c) 2013 by Objectwrite, Inc., Josee 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 Permissions Department 
*  One Lake Street 
*  Upper Saddle River, NJ 07458 
*  Fax: (201) 236-3290 
*/ 

/* This file defines the Sales_item class used in chapter 1. 
* The code used in this file will be explained in 
* Chapter 7 (Classes) and Chapter 14 (Overloaded Operators) 
* Readers shouldn't try to understand the code in this file 
* until they have read those chapters. 
*/ 

#ifndef SALESITEM_H 
// we're here only if SALESITEM_H has not yet been defined 
#define SALESITEM_H 

// Definition of Sales_item class and related functions goes here 
#include <iostream> 
#include <string> 

class Sales_item { 
// these declarations are explained section 7.2.1, p. 270 
// and in chapter 14, pages 557, 558, 561 
friend std::istream& operator>>(std::istream&, Sales_item&); 
friend std::ostream& operator<<(std::ostream&, const Sales_item&); 
friend bool operator<(const Sales_item&, const Sales_item&); 
friend bool 
operator==(const Sales_item&, const Sales_item&); 
public: 
    // constructors are explained in section 7.1.4, pages 262 - 265 
    // default constructor needed to initialize members of built-in type 
    Sales_item() = default; 
    Sales_item(const std::string &book): bookNo(book) { } 
    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&); 

    // operations on Sales_item objects 
    std::string isbn() const { return bookNo; } 
    double avg_price() const; 
// private members as before 
private: 
    std::string bookNo;  // implicitly initialized to the empty string 
    unsigned units_sold = 0; // explicitly initialized 
    double revenue = 0.0; 
}; 

// used in chapter 10 
inline 
bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs) 
{ return lhs.isbn() == rhs.isbn(); } 

// 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) 
{ 
    // must be made a friend of Sales_item 
    return lhs.units_sold == rhs.units_sold && 
      lhs.revenue == rhs.revenue && 
      lhs.isbn() == rhs.isbn(); 
} 

inline bool 
operator!=(const Sales_item &lhs, const Sales_item &rhs) 
{ 
    return !(lhs == rhs); // != defined in terms of operator== 
} 

// assumes that both objects refer to the same ISBN 
Sales_item& Sales_item::operator+=(const Sales_item& rhs) 
{ 
    units_sold += rhs.units_sold; 
    revenue += rhs.revenue; 
    return *this; 
} 

// assumes that both objects refer to the same ISBN 
Sales_item 
operator+(const Sales_item& lhs, const Sales_item& rhs) 
{ 
    Sales_item ret(lhs); // copy (|lhs|) into a local object that we'll return 
    ret += rhs;   // add in the contents of (|rhs|) 
    return ret;   // return (|ret|) by value 
} 

std::istream& 
operator>>(std::istream& in, Sales_item& s) 
{ 
    double price; 
    in >> s.bookNo >> s.units_sold >> price; 
    // check that the inputs succeeded 
    if (in) 
     s.revenue = s.units_sold * price; 
    else 
     s = Sales_item(); // input failed: reset object to default state 
    return in; 
} 

std::ostream& 
operator<<(std::ostream& out, const Sales_item& s) 
{ 
    out << s.isbn() << " " << s.units_sold << " " 
     << s.revenue << " " << s.avg_price(); 
    return out; 
} 

double Sales_item::avg_price() const 
{ 
    if (units_sold) 
     return revenue/units_sold; 
    else 
     return 0; 
} 
#endif 

そして、これエラーです -

||=== Build: Debug in Sales_item (compiler: GNU GCC Compiler) ===| 
include\Sales_item.h|56|warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11| 
include\Sales_item.h|70|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11| 
include\Sales_item.h|71|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11| 
include\Sales_item.h|45|error: constructor required before non-static data member for 'Sales_item::units_sold' has been parsed| 
include\Sales_item.h|45|error: constructor required before non-static data member for 'Sales_item::revenue' has been parsed| 
C:\Users\Tomer\Desktop\C++\Code\Sales_item\src\Sales_item.cpp|3|error: definition of explicitly-defaulted 'Sales_item::Sales_item()'| 
include\Sales_item.h|56|error: 'Sales_item::Sales_item()' explicitly defaulted here| 
C:\Users\Tomer\Desktop\C++\Code\Sales_item\src\Sales_item.cpp|8|error: definition of implicitly-declared 'Sales_item::~Sales_item()'| 
||=== Build failed: 5 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===| 

ごめんなさいe悪い英語。

+1

Pro-tip:C++のeBookを購入しないでください。本を入手してください。 –

+0

なぜですか?電子ブックに何が間違っていますか? – Tomer

+0

まず、フォーマットエラー、コード、実際のテキストがあります。第2に、コード例のいくつかが突然終了し、カットされます。そして第三に、それについて私の言葉を取るだけではありません。[自分のためにいくつかの電子ブックレビューを読む](https://www.amazon.com/Primer-5th-Stanley-B-Lippman/product-reviews/0321714113/ ref = cm_cr_arp_d_hist_1?ie = UTF8&filterByStar = one_star&reviewerType = avp_only_reviews&showViewpoints = 0&pageNumber = 1)。 –

答えて

0

コードでいくつかの新しいキーワードが使用されている可能性があるため、コンパイラまたはIDEでC++ 11をサポートする必要があります。私はそれをテストし、C++ 11とうまく動作します。

+0

コンパイラは警告として「警告:デフォルトおよび削除された関数は-std = C++ 11でのみ使用可能です。 一般に、コンパイラの警告には常に注意してください。 – drRobertz

+0

ああ、まあまあ、私は最初の2行を読んで、私は彼らが何を意味し、止まったのか分からないことを実感しました。ごめんなさい – Tomer

+0

私のコンパイラはどこで更新できますか?私はちょうど私が新しいバージョンを見つけることができます(そして最近のものと信じられていた)新しいコンパイラです。 – Tomer

関連する問題