【发布时间】:2013-09-26 18:11:22
【问题描述】:
我目前正在学习 C++ 并阅读“C++ Primer 5th Edition”。我刚开始学习构造函数,但遇到了一些我想不通的问题。
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data
{
//default constructor
Sales_data(const std::string &s, unsigned n, double p):
bookNo(s), units_sold(n), revenue(p*n) { }
//new members: operations on Sales_data objects
std::string isbn() const { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const;
//data members
std::string bookNo;
unsigned units_sold;
double revenue;
};
我很确定我写的默认构造函数是正确的(考虑到它是书中写的),但显然我在这里遗漏了一些东西。我没有看到任何语法错误或任何东西,并且所有内置成员都正在初始化,所以我不知道出了什么问题。
编辑:
我刚刚发现不是我的头文件给出了错误,它实际上是我的源文件。当我创建一个 Sales_data 对象时:
Sales_data total;
它给了我“没有合适的默认构造函数可用”错误。考虑到作者给出了三种编写默认构造函数的方法,我仍然不确定出了什么问题,它们是:
struct Sales_data {
// constructors added
Sales_data() = default; //Number 1
Sales_data(const std::string &s): bookNo(s) { } //Number 2
Sales_data(const std::string &s, unsigned n, double p): //Number 3
bookNo(s), units_sold(n), revenue(p*n) { }
如果这些不是默认构造函数,那么它们到底是什么/它们的目的是什么?
【问题讨论】:
-
我相信你忘了解释什么问题是什么
-
这不是默认构造函数——默认构造函数要么不带参数,要么具有所有参数的默认值。
-
那个头文件里有什么?
-
显示问题所在的行。
-
显示准确的编译错误
标签: c++ class compiler-errors default-constructor