2011-12-06 6 views
0

あなたのご意見ありがとうございますが、この問題は解決されました!私は正しい順序でパラメータを持っていなかった。良い夜を! 私のpriority_queueのオブジェクトがオーバーフローとして登録し続ける

はいくつかの理由についてTimerEventという名前のクラスからオブジェクトが

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

を設定しておくしかし、私の知る限りでは過負荷はありません。

コードを見て、洞察があれば教えてください。 Ty。クラスで

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

答えて

0

あなたはstringとしての最初の引数を取るコンストラクタを定義していますが、オブジェクトを構築するときには、文字ではない文字列を渡します。定義ではcharの引数priとして文字列を渡します。

多くの引数を必要とし、正確な順序を記憶していないという単純なケースです。引数の少ないコンストラクタを用意し、構築後に値を設定する関数を追加してください。より多くのコード行を使用しますが、将来的にはもっと読みやすくなります。

0

正式には、TimerEvent::TimerEventの2つのオーバーロードがあります。定義した コンストラクタとコピーコンストラクタです。 の目的をオーバーロードするためには、デフォルトの引数 の存在が過負荷のように扱われるため、さらに多くのことがあります。ことを考えると、コンパイラは 次のオーバーロードを検討します:

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

n個のプッシュ文で、あなたが呼び出す:

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

最初でも最後の引数が一致することができますどちら:に方法はありません charstringまたはTimerEventのいずれかに変換し、 char const[]をintに変換する方法はありません。 5番目の引数 はintboolへの変換(リテラルのための予期しない)を必要と '\0'第六のいずれかで得られ、boolcharに(非常に、非常に予想外または:を求め他の 変換のいくつかは同様に驚くべきことです'\1')。