c ++新手
在我开始之前是的,这是家庭作业,通常我可以自己解决问题,但我没有在特定行上得到任何实际错误,所以这对我来说很难。
我的代码:
#include <string>
#include <iostream>
using namespace std;
class JobBid{
private:
friend ostream& operator<<(ostream&, const JobBid&);
int bid;
int quote;
public:
JobBid& operator() (int, int);
bool operator<(const smallest)
};
ostream& operator<<(ostream& out, const JobBid& baq){
out << "Bid #: " << baq.bid << " Quote $: " << baq.quote << endl;
return out;
}
JobBid& JobBid::operator()(int b, int q){
bid = b;
quote = q;
}
int main()
{
int b1;
int b2;
int b3;
int b4;
int q1;
int q2;
int q3;
int q4;
int smallestbid;
int smallestquote;
const int size = 4;
JobBid JBArray[size];
cout << "Enter the bid number for the first bid:" << endl;
cin >> b1;
cout << "Now enter the quote price for the first bid:" << endl;
cin >> q1;
cout << "Enter the bid number for the second bid:" << endl;
cin >> b2;
cout << "Now enter the quote price for the second bid:" << endl;
cin >> q2;
cout << "Enter the bid number for the third bid:" << endl;
cin >> b3;
cout << "Now enter the quote price for the third bid:" << endl;
cin >> q3;
cout << "Enter the bid number for the fourth bid:" << endl;
cin >> b4;
cout << "Now enter the quote price for the fourth bid:" << endl;
cin >> q4;
JBArray[1](b1, q1);
JBArray[2](b2, q2);
JBArray[3](b3, q3);
JBArray[4](b4, q4);
cout << JBArray[1] << JBArray[2] << JBArray[3] << JBArray[4] << endl;
JobBid smallest = JBArray[0] ;
for ( int i=1; i < sizeof(JBArray)/sizeof(JBArray[0]); ++i )
if ( JBArray[i] < smallest )
smallest = JBArray[i] ;
cout << smallest << '\n' ;
}
我知道代码可能非常糟糕,但它是一个介绍类。无论哪种方式,我都试图在main的末尾返回我创建的数组列表的最小值。但是我发现尝试使用'&lt;'我的类型'JobBid'上的运算符创建了错误,所以我环顾四周,发现你必须自己定义它。
我试着这样做:
bool operator<(const smallest)
但是我一定做错了,之后我能够解决所有错误(我指的是特定行的错误),除非现在我得到了这个:
undefined reference to `JobBid::operator<(JobBid)'
我不确定如何修复它。我认为找到数组中最小对象的逻辑是正确的,所以它必须是带有小于符号的东西。
答案 0 :(得分:1)
重载的<
运算符没有定义。由于这是作业,我不会告诉你究竟该怎么做,但它应该与你已经定义的重载运算符非常相似。试着看看这个网站:http://www.learncpp.com/cpp-tutorial/96-overloading-the-comparison-operators/
此外,声明并不完全正确。而不是
bool operator<(const smallest)
应该是
friend bool operator<(const JobBid &left, const JobBid &right);
然后定义:
bool operator<(const JobBid &left, const JobBid &right)
{
// for you to fill in
}
你错过了分号和参数的类型。
编辑:我还发现了另一个问题。你永远不会定义JBArray [0],所以你的JBSmallest
应该是JBArray[1]
,而不是JBArray[0]
。
答案 1 :(得分:1)
您的方法声明缺少类型;你告诉它变量名称及其常量,但不是类型。试试这个:
bool operator<(const JobBid& jb) const
{
return (bid < jb.bid) && (quote < jb.quote);
}
我建议在方法末尾添加const
,告诉编译器和读者该方法不会更改任何数据成员。
编辑1
该方法应该添加到类中:
class JobBid
{
private:
friend ostream& operator<<(ostream&, const JobBid&);
int bid;
int quote;
public:
JobBid& operator() (int, int);
bool operator<(const JobBid & jb) const
{
return (bid < jb.bid) && (quote < jb.quote);
}
};
编辑2:课外实施
class JobBid
{
private:
friend ostream& operator<<(ostream&, const JobBid&);
int bid;
int quote;
public:
JobBid& operator() (int, int);
bool operator<(const JobBid & jb) const;
};
bool JobBid::operator<(const JobBid & jb) const
{
return (bid < jb.bid) && (quote < jb.quote);
}
编辑3:独立功能
class JobBid
{
private:
friend ostream& operator<<(ostream&, const JobBid&);
int bid;
int quote;
public:
JobBid& operator() (int, int);
friend bool operator<(const JobBid & a,
const JobBid & b);
};
bool operator<(const JobBid & a, const JobBid & b)
{
return (a.bid < b.bid) && (a.quote < b.quote);
}
答案 2 :(得分:0)
你错过了&#34; bool operator&lt;(const smallest)&#34;
的定义运营商的实施可能是
friend bool JobBid::operator<(const JobBid& smallest) {
if(smallest.bid < this.bid && smallest.quote < this.quote)
return true;
else
return false;
}