簡體   English   中英

我的priority_queue的對象不斷注冊為溢出

[英]My priority_queue's objects keep registering as overflowed

感謝您的意見,但此問題已解決! 我沒有正確順序的參數。 晚上好!

出於某些原因,名為TimerEvent的類中的對象保持設置

error C2665: 'TimerEvent::TimerEvent' : none of the 2 overloads could convert all the argument types

但據我所知,沒有過載。

請查看代碼,如果您有任何見解,請告訴我。

class TimerEvent {

public:

    char primary;
    int secondary;
    string item;
    int socketno;
    int eventnumber;
    int expirytime;
    bool eventvalid;
    TimerEvent(string td, int sno = 0, int evnum = 0, int exptime = 0, bool evvalid = false, char pri = 'A', int sec = 1)
    : primary(pri), secondary(sec), socketno(sno), eventnumber(evnum), expirytime(exptime), eventvalid(evvalid), item(td) {}

    friend bool operator<(
    const TimerEvent& x, const TimerEvent& y) {

    if(x.primary > y.primary)

        return true;
    if(x.primary == y.primary)

    if(x.secondary > y.secondary)

    return true;

    return false;
}
    friend ostream&
    operator<<(ostream& os, const TimerEvent& td) {
    return os << td.primary << td.secondary
    << ": " << td.item << td.socketno << td.eventnumber << td.expirytime << td.eventvalid;
}
};

這是另一半

if( comsent.compare( "test" ) == 0 )    {

        timerqueue.push(TimerEvent( 'A', 2, 10, 1, 0, true, "Alright"));
                  // The above is setting the error

        cout << " Top Value Is: " << timerqueue.top().socketno << endl;
}

在該類中,您定義構造函數以使其第一個參數作為string ,但是在構造對象時,您傳遞的是字符而不是字符串。 您還將字符串作為參數pri傳遞,該字符串在定義中為char

這是一個簡單的例子,其中包含許多參數,並且不記得確切的順序。 嘗試使用較少參數的構造函數,並在構造后添加函數以設置值。 它將使用更多的代碼行,但將來會更具可讀性。

正式地, TimerEvent::TimerEvent有兩個重載:您定義的構造函數和復制構造函數。 出於重載的目的,還有更多,因為默認參數的存在被視為重載。 鑒於此,編譯器將考慮以下重載:

TimerEvent( string, int, int, int, bool, char, int )
TimerEvent( string, int, int, int, bool, char )
TimerEvent( string, int, int, int, bool )
TimerEvent( string, int, int, int )
TimerEvent( string, int, int )
TimerEvent( string, int )
TimerEvent( string )
TimerEvent( TimerEvent const& )

在push語句中,您可以調用:

TimerEvent( char, int, int, int, int, bool, char const[] )

第一個參數和最后一個參數都無法匹配:無法將char轉換為stringTimerEvent ,也無法將char const[]轉換為int。 一些要求是令人驚訝的,以及其他的轉換:第五個參數需要intbool轉換(意想不到用於一個文字),和第六一個boolchar (非常非常意外的,導致在任一'\\0''\\1' )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM