gpt4 book ai didi

c++ - 对使用带有 istream 参数的构造函数感到困惑

转载 作者:行者123 更新时间:2023-11-28 06:50:09 24 4
gpt4 key购买 nike

我在尝试学习如何创建构造函数时遇到了一个小问题。

我目前正在使用“C++ 入门”一书学习 C++,我已经到了一个地步,我被告知要创建一些构造函数,然后使用这些构造函数更改代码。练习说明我应该使用 istream 构造函数重写这个程序,但我不知道如何去做。

int main()
{
Sales_data total;
if (read(cin,total))
{
Sales_data trans;
while (read(cin,trans))
{
if (total.isbn() == trans.isbn())
{
total.combine(trans);
}
else
{
print(cout, total) << endl;
total = trans;
}
}
print(cout, total) << endl;
}
else
{
cerr << "No data?!" << endl;
}
return 0;
}

我遇到的问题是,我不知道我应该如何使用 istream 使用构造函数,我认为这很简单,只需将 cin 作为默认值传递即可,但它不起作用。从 Visual Studio 我得到一个 "LNK2019"错误,从 code::blocks "undefined reference to Sales_data::read(std::istream&, Sales_data&)

我的头文件中的代码如下所示:

struct Sales_data 
{
Sales_data() = default;
Sales_data(const std::string &s) : bookNo(s){}
Sales_data(const std::string &s, unsigned n, double p) :
bookNo(s), units_sold(n), revenue(p*n){}
Sales_data(std::istream &is)
{
read(is, *this);
}

std::string isbn() const { return bookNo; };
Sales_data& combine(const Sales_data&);
double avg_price() const;
Sales_data add(Sales_data&, Sales_data&);
std::ostream &print(std::ostream&, const Sales_data&);
std::istream &read(std::istream&, Sales_data&);

std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};

加上下面的一些定义。

我的 cpp 文件如下所示:

int main()
{
Sales_data total(cin); //results in error "LNK2019" or "undefined reference to Sales_data::read(std::istream&, Sales_data&)"

if (1)
{ //not really sure what to use here but if I get my default value to work I might figure it out.
// I'm thinking it should work with just cin >> total or read(total)
Sales_data trans(cin); //results in error "LNK2019" or "undefined reference to Sales_data::read(std::istream&, Sales_data&)"
while (1)
{
if (total.isbn() == trans.isbn())
{
total.combine(trans);
}
else
{
print(cout, total) << endl;
total = trans;
}
}
print(cout, total) << endl;
}
else
{
cerr << "No data?!" << endl;
}

return 0;
}

希望您理解我的问题,感谢您提供的所有帮助! :)

最佳答案

在我看来,您似乎缺少书中的某些代码,或者书中希望您实现其他功能而不仅仅是构造函数。

链接器错误告诉您它无法找到您的 read 函数的实现,它应该如下所示:

std::istream& Sales_data::read(std::istream&, Sales_data&)
{
// TODO - implementation here.
}

还值得一提的是,函数实现应添加到源 (.cpp) 文件中。

关于c++ - 对使用带有 istream 参数的构造函数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24103276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com