你如何为这段代码编写模板?

时间:2015-04-23 18:49:44

标签: c++ templates vector

所以这是我的C ++ hw,现在唯一的错误就是那些:

liux1780_9B.cpp:10:1:错误:无参数列表无效使用模板名称'std :: vector'  vector bubblesort(vector);  ^

liux1780_9B.cpp:在函数'int main()'中:

liux1780_9B.cpp:68:8:错误:'bubblesort'之前缺少模板参数  vector bubblesort(vectoritem);         ^

liux1780_9B.cpp:68:8:错误:预期';'在'bubblesort'之前

liux1780_9B.cpp:在全球范围内:

liux1780_9B.cpp:76:1:错误:无效使用template-name'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; 
}

1 个答案:

答案 0 :(得分:2)

首先,在将item类用作vector的模板参数之前,需要转发声明class item; 类。

vector

然后你需要确保返回vector<item> bubblesort(vector<item>); 也有一个类型

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

同样在您的函数本身中,您需要为参数变量赋予名称并使用该变量

const

您还应该考虑将初始向量作为const引用传递以避免复制,因为无论如何您都要返回一个新向量。或者将非 self.web = builder.get_object('boxWeb') self.web_view = WebKit.WebView() self.web_view.open("http://web_with_apt_links") self.web_view.show() self.web.add(self.web_view) 引用传递给向量并进行就地修改。