跟随本书:C++ Primer Stanley B Lippman,Joee Lajoie,Barbara Moo第5版
1.5节使用此代码演示对象类型为[[Sales_item]]的标准操作(>> istream和<< ostream)。#include <iostream>
#include "Sales_item.h"
int main(){
Sales_item book;
cin>> book;
cout<< book << endl;
return 0;
}
文件可从书中提供的下载链接中获得。 我正在使用以下CMake来编译我的源代码ISBN0.cpp:Sales_item.h
cmake_minimum_required(VERSION 3.0)
add_executable(readISBN ISBN0.cpp)
编译时出现以下错误Sales_item2.h:11:7: error: constructor required before non-static data member for ‘Sales_item::units_sold’ has been parsed
我已经尝试将原始的
Sales_item.h
缩减为以下内容,以重现错误:#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>
class Sales_item {
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
friend std::istream& operator>>(std::istream&, Sales_item&);
// private members as before
private:
std::string bookNo; // implicitly initialized to the empty string
unsigned units_sold = 0; // explicitly initialized
double revenue = 0.0;
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;
};
std::ostream&
operator<<(std::ostream& out, const Sales_item& s)
{ ... }
std::istream&
operator>>(std::istream& in, Sales_item& s)
{ ... }
看到初学者的示例不起作用真令人沮丧!有人可以解释1:试图说明什么错误? (简单地说)&2:要使示例工作,需要进行哪些修改?
[遵循本书:C ++ Primer Stanley B Lippman,Joee Lajoie和Barbara Moo的第5版,第1.5节使用此代码来演示对象的标准操作(>> istream和<< ostream)...