【问题标题】:C++ Operator '<<' errorC++ 运算符“<<”错误
【发布时间】:2012-02-29 17:34:00
【问题描述】:

我有一个关于家庭作业的问题。

我有两节课。一个叫ticket.cpp,另一个叫TicketOrder.cpp

主要在ticket.cpp内。

我在 Linux 上使用 g++ 编译器。

我正在尝试打印出一个名为 orders 的 TicketOrder 对象的向量,但它给了我以下错误:

ticket.cpp:57: 错误:'std::cout ::operator[] with _Tp = TicketOrder, _Alloc = std::allocator'

这是我的代码:

ticket.cpp

#include <iostream>
#include <vector>
#include <limits>
#include <cctype>
#include "TicketOrder.cpp"
using namespace std;

int main ()
{
    int numberoftickets=0;
    string input2;
    char input3;
    int profit=0;
    vector <TicketOrder> orders;
    int atotalmoney=0;
    int btotalmoney=0;
    int ctotalmoney=0;
    int dtotalmoney=0;
    int etotalmoney=0;

    do
    {
        cout << "\nPick a ticket that you would like to buy: \n\n";
        cout << "(A) Students without an activity card: $2.00 \n";
        cout << "(B) Faculty and staff: $3.00 \n";
        cout << "(C) USC alumni: $5.00 \n";
        cout << "(D) UCLA students and alumni: $20.00 \n";
        cout << "(E) Everyone else: $10.00 \n";

        cin >> input3;

        if (input3=='A')
        {
            cout << "How many tickets do you wish to buy? " <<endl;

            if (numberoftickets >0)
            {
                TicketOrder order;
                order.setQuantity(numberoftickets);
                order.setType(input3);
                orders.push_back(order);
                for (int i=0; i< orders.size(); i++)
                {
                    cout << orders[i];
                }
            }
        }
        else
        {
            cout << "Sorry did not recognize input, try again. " << endl;
        }
    } while (input3 != 'S');

TicketOrder.cpp:

#include <iostream>
using namespace std;

class TicketOrder
{
public :
    //Getters

    int getQuantity() const
    {
        return quantity;
    }

    char  getType() const
    {
        return type;
    }

    //Setters

    void setQuantity (int x)
    {
        quantity=x;
    }

    void setType(char y)
    {
        type =y;
    }

private:
    char type;
    char quantity;

};

【问题讨论】:

    标签: c++


    【解决方案1】:

    由于编译器笨拙地试图解释,missing an operator&lt;&lt; 类的代码是 missing an operator&lt;&lt;

    class TicketOrder {
    public:
        friend std::ostream& operator<<(std::ostream& os, TicketOrder const& order) {
            os << "Type: " << type << ", quantity: " << quantity;
            return os;
        }
    
        char type;
        int quantity;
    };
    

    (注意:您可能希望将quantity 更改为int。)

    【讨论】:

    • HH,我现在不知道 operator&lt;&lt;(std::ostream&amp;&amp; os, ...) 可以像这样在类中定义。顺便说一句:应该是const TicketOrder &amp; 而不是TicketOrder const
    • @Vyktor:再次检查。 TicketOrder const&amp; 完全一样。
    • TicketOrder constconst TicketOrder 是等效的语法吗?很高兴知道,谢谢。
    • 风格建议,而不是有一个friend 运算符,有一个普通的成员函数print(std::ostream&amp;)const 并有一个非朋友全局operator&lt;&lt; 调用它。更松散的耦合,你可以让print 更灵活(比如带有默认值的额外参数)。
    • @Zenexer:这里没有指针TicketOrder const&amp; 表示“对常量TicketOrder 的引用”,const TicketOrder&amp; 表示“对常量TicketOrder 的引用”。请查阅最近的 C++ 书籍。
    【解决方案2】:

    您必须将运算符 Further reading

    【讨论】:

      【解决方案3】:

      您正在尝试在 coutTicketOrder 对象上使用 TicketOrder 对象生成一个字符串,然后通过cout 输出该字符串。要么这样,要么您可以为 TicketOrder 类定义

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-04
        • 2012-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2015-11-19
        • 1970-01-01
        相关资源
        最近更新 更多