标题:构造函数出错。
只看楼主
shanexia
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-11-17
结帖率:40%
已结贴  问题点数:10 回复次数:3 
构造函数出错。
#include <iostream>
#include<string>
using namespace std;


class sales_item
{
public:
sales_item(const string &book):isbn(book),units_sold(0),revenue(0.0)
{


}
sales_item(istream &is);
void print()
{
std::cout<<sales_item().isbn<<endl;
}
private:
int units_sold;
double revenue;
string isbn;
};


int main()
{
sales_item s1("let us do it!");
s1.print();
return 0;
}
错误信息: no matching function for call to *sales_item::sales_item()*|
这个是怎么回事 啊?我的原意是想利用print函数查看isbn的值的,没有想到出现了错误,如果给book赋上默认实参就不会出现错误了。
搜索更多相关主题的帖子: revenue include private matching function 
2014-07-29 16:15
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:10 
你是不是看《C++ Primer》这本书?
你这个貌似不是书上的代码, 很多年前看的, 书中的例题记不太清

说下我看到的你的错误:
1、 sales_item(istream &is); 这个构造函数只有声明而没有函数定义, 当然, 有些编译器是不会要求你提供的;
2、
程序代码:
void print()
{
    std::cout<<sales_item().isbn<<endl;    // 你这个是逻辑问题, sales_item()的结果是什么?
}

改成
程序代码:
void print()
{
    cout << this->isbn << endl;    // 你在一开始就使用了 using namespace std; 为什么这里还要std::
}


[ 本帖最后由 福尔摩斯 于 2014-7-29 17:49 编辑 ]

自我放逐。。。
2014-07-29 17:47
shanexia
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-11-17
得分:0 
回复 2 楼 福尔摩斯
恩。是这样的,这个是我自己写的程序。 其实直接删去sales_item().也可以。
其实我还有一个疑惑,就是你说的那个sales_item(istream &is);问题。我们应该怎样运用这个istream呢?
#include <iostream>
#include<string>
using namespace std;


class sales_item
{
public:
sales_item(const string &book="fuck!"):isbn(book),units_sold(0),revenue(0.0)
{


}
sales_item(istream &is=cin)
{


}
void print()
{
std::cout<<isbn<<endl;
cout<<units_sold<<endl;
cout<<revenue<<endl;
}
private:
int units_sold;
double revenue;
string isbn;
};


int main()
{
sales_item s1(cin);
s1.print();
return 0;
}
这个我想实现的功能是,通过cin读入字符串,为何得不到我想要的结果,打印出的是一组垃圾数字。为什么啊?
2014-07-29 18:07
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:0 
回复 3 楼 shanexia
程序代码:
sales_item(istream &is=cin)
{

}

唉, 你这个想法有逻辑问题:

首先, 你想过 cin输入流 输入的数据存哪里? 没有存储就显示结果当然是乱码;

其次, 我搞不明白, 参数为什么使用输入流? 你直接输入给变量, 然后变量再通过 构造函数 传给 类对象不就好了

当然, 我这不是在骂你或者损你, 能通过自己想法去重新整合自己所学到的知识, 这种方法值得学习 活学活用。

[ 本帖最后由 福尔摩斯 于 2014-7-29 21:29 编辑 ]

自我放逐。。。
2014-07-29 21:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434520-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.315258 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved