2015-04-23 158 views
-3

所以這是我的C++ hw,現在我得到的唯一錯誤是那些:如何爲此代碼編寫模板?

liux1780_9B.cpp:10:1:錯誤:無效使用模板名'std :: vector'沒有參數列表 vector bubblesort(vector); ^

liux1780_9B.cpp:在函數「詮釋主()」:

liux1780_9B.cpp:68:8:錯誤:前「冒泡」 矢量冒泡(vectoritem)缺少模板參數; ^

liux1780_9B.cpp:68:8:錯誤:預期 ';' 前 '冒泡'

liux1780_9B.cpp:在全球範圍:

liux1780_9B.cpp:76:1:錯誤:無效使用模板名'std :: vector' 沒有參數列表 vector bubblesort(vectoritem){ ^ 編譯失敗。

而這裏的代碼:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 
#include <algorithm> 
#include <vector> 

using namespace std; 

vector bubblesort(vector<item>); 

class item 
{ 
    private: 
     int numItem; 
     string itemName; 
    public: 
     item(int numItem, string itemName) 
     { 
      this->numItem = numItem; 
      this->itemName = itemName; 
     } 
     int getnumItem() 
     { 
      return numItem; 
     } 
     string getitemName() 
     { 
      return itemName; 
     } 

     bool operator<(item r) 
     { 
      return this->getnumItem() < r.getnumItem(); 
     } 
}; 


int main() 
{ 
    string fileName; 
    cin >> fileName; 
    ifstream fin; 
    fin.open(fileName.c_str()); 
    if (fin.fail()) 
    { 
     cout << "Input file opening failed.\n"; 
     exit(1); 
    } 
    ofstream fout; 
    fout.open(fileName.c_str()); 
    if (fout.fail()) 
    { 
     cout << "Output file opening failed.\n"; 
     exit(1); 
    } 

    int count; 
    string name; 
    vector<item> list; 

    while (fin >> name) 
    { 
     fin >> count; 
     list.push_back(item(count, name)); 
    } 

vector bubblesort(vector<item>); 

    fin.close(); 
    fout.close(); 

    return 0; 
} 

vector bubblesort(vector<item>) { 
    int temp; 
    bool finished = false; 
    while (!finished) { 
    finished = true; 
    for (int i = 0; i < item.size()-1; i++) { 
     if (item[i] > item[i+1]) { 
     temp = item[i]; 
     item[i] = item[i+1]; 
     item[i+1] = temp; 
     finished=false; 
      } 
     } 
    } 
    return item; 
} 
+0

如果可能,請考慮使用'std :: swap'。 – chris

回答

2

首先,你需要使用轉發它作爲vector模板參數之前聲明你item類。

class item; 

然後,你需要確保返回vector還有一個類型

vector<item> bubblesort(vector<item>); 

而且在功能本身,你需要給參數變量的名稱,並使用該變量

vector<item> bubblesort(vector<item> items) 
{ 
    \\ do stuff with items 
} 

您還應該考慮將初始向量作爲const引用傳遞以避免複製,因爲無論如何您要返回新的向量。或者將非const引用傳遞給vector並在原地進行修改。

+0

傳遞價值是在這裏做的正確的事情。該函數將轉換給定的副本並返回該副本。製作一個新的並複製參數是額外的工作,並且不允許移動。當然,如果需要進行就地修改,非常量參考選項仍然很好。 – chris

+0

非常感謝! –