为<的运算符获取未定义的引用函数

时间:2016-04-22 14:37:10

标签: c++ boolean operators

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

我不确定如何修复它。我认为找到数组中最小对象的逻辑是正确的,所以它必须是带有小于符号的东西。

3 个答案:

答案 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;
}