学习C ++并遇到早期示例错误(在非静态数据成员之前需要构造函数)

问题描述 投票:3回答:1

跟随本书: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; }

文件

Sales_item.h

可从书中提供的下载链接中获得。 我正在使用以下CMake来编译我的源代码ISBN0.cpp:

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)...

c++
1个回答
2
投票
类的非静态成员特定于该类,并且该类的每个对象都具有自己的这些成员的单独实例。有关非静态成员的更多信息,请查看以下链接:cpp refthis excellent c++ site for beginners
© www.soinside.com 2019 - 2024. All rights reserved.