2014-05-23 76 views
2

我收到以下錯誤:無效操作數的二進制表示

Invalid operands to binary expression (" basic_ostream<char,std::_1::char_traits<char>> ' and ' value_type ' (aka ' qElem ')) which occurs at:

cout << "Your first task is to: " << tasks.front() << endl; 

代碼建議我把在&tasks.front()一個&但我不希望接收的0xfdlkajd的值,我想存儲中的第一個值我的矢量。任何幫助將不勝感激。

我的代碼:

#ifndef Queue_queue_h 
#define Queue_queue_h 

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 


struct qElem { //qElem Struct 

    string s; 
    string p; 
    qElem(string task, string priority) : s(task), p(priority) {} 

}; 


//Establishing my Template and PriQueue Class 
template <class T> //Template 
class PriQueue 
{ 
public: 

    vector<qElem> tasks; 

    //PriQueue(); 
    void enqueue(T str, int pri); //Adds to queue 
    void dequeue(); //Deletes from queue 
    void peek(); //Prints the first value in queue 
    void size(); //Prints how many in queue 
    void sort(vector<qElem*> &tasks); //Sort according to priority 

private: 

    int count = 0; 

}; 

template <class T1> 
void PriQueue<T1>::enqueue(T1 str, int pri) //Adding an element to the queue 
{ 

    tasks.push_back(qElem(str, pri)); 

    sort(tasks); //NEW ERROR IS HERE 

    count++; 

} 

template <class T1> 
void PriQueue<T1>::dequeue() //Removing an element from the front of the queue 
{ 
    //tasks.erase(tasks.begin()); 
    tasks.erase(tasks.begin()); 

    if (tasks.empty()) { 
     cout << "You have no tasks!" << endl; 
} 

    else { 


    } 

    count--; 

} 

template <class T1> 
void PriQueue<T1>::peek() //Returning a value at front of the queue (NOT removing it) 
{ 
    if (tasks.empty()) { 
     cout << "You have no tasks!" << endl; 
} 

else { 
     cout << "Your first task is to: " << tasks.front().s << endl; 

} 

//Testing Purposes only 
/* 
cout << "Your tasks are:"; 
for (typename vector<T1>::iterator i = tasks.begin() ; i != tasks.end(); ++i) 
cout << " " << *i << ","; 
cout << endl; 
*/ 

} 

template <class T1> 
void PriQueue<T1>::size() //Returning the number of items in the queue. 
{ 
    cout << "You have " << count << " tasks in queue." << endl; 

} 

template <class T> 
void PriQueue<T>::sort(vector<qElem*> &tasks) { 
bool sortUp = true; 
for(int i = 0; i < tasks.size();i++) 
    for(int j = i+1; j < tasks.size(); j++) 
    { 
     if(sortUp) 
     { 
      if(tasks[i] > tasks[j]) 
       swap(tasks[i],tasks[j]); 
     } 
     else if(tasks[i] < tasks[j]) //else sortDown 
      swap(tasks[i],tasks[j]); 
    } 
} 


#endif 
+0

qElem必須實現運算符<< – agrum

+0

@agrum我有另一個有點相對的錯誤問題,我只是認爲這將是一個浪費,爲它創造一個全新的問題。我已經更新了我的代碼並添加了一個排序函數。現在我試圖在排隊函數中使用該排序函數,但是我得到以下錯誤:類型爲'vector '的非常量左值引用無法綁定到無關類型'value_type'的值(又名'qElem')什麼是我做錯了? – user260739

回答

4

編譯器不知道如何打印出qElem。如果只想打印出任務,請使用cout << "..." << tasks.front().s << endl;。編譯器知道如何打印std::string。 (您也可以實現自己的operator <<過載qElem,但在這種情況下這可能是矯枉過正)。

請注意,您的代碼有很多問題。爲什麼當你的qElem只存儲std::string s時,你使用模板PriQueue?爲什麼你使用類成員(sspp)在構造函數中存儲臨時值?您的優先級是int(構造函數)還是std::stringqElem)或T

+0

「你爲什麼在你的qElem只存儲std :: strings時使用模板PriQueue?」那麼最初我是在我的結構中傳遞一個int和一個字符串,如下所示:string s; int p; (字符串任務,int優先級):s(任務),p(優先級){}但這給我一個錯誤:tasks.push_back(qElem(ss,pp));聲明「沒有匹配的構造函數來初始化'qElem'」P.對不起後期重播 – user260739

+0

沒關係我想通了,我可能會很累。謝謝你的幫助。 – user260739

+0

我有另一個有點相對的錯誤問題,我只是認爲這將是一個浪費,爲它創造一個全新的問題。我已經更新了我的代碼並添加了一個排序函數。現在我試圖在排隊函數中使用該排序函數,但是我得到以下錯誤:類型爲'vector '的非常量左值引用無法綁定到無關類型'value_type'的值(又名'qElem')什麼是我做錯了? – user260739

1

qElem必須實現運營商< <

struct qElem { //qElem Struct 

    string s; 
    string p; 
    qElem(string task, string priority) : s(task), p(priority) {} 

    std::ostream& operator<<(std::ostream& os, const qElem & obj) 
    { 
     os << s << "/" << p; 
     return os; 
    } 
}; 
相關問題