'。'之前缺少模板参数代币

时间:2011-11-04 02:34:53

标签: c++ templates compiler-errors

我正在尝试将我的程序组织成函数并遇到了这个问题,

  

错误:“''之前缺少模板参数。标记“

一旦我尝试在函数中运行代码,如果它只在main()中就可以正常工作。任何熟悉此错误的人都知道问题可能是什么?

注意,注释掉的代码会删除错误,但会对有序列表class进行混乱,并重置其长度或其他内容,导致orderedlist.getlength()函数转移到return 0,这样就不会产生任何错误while()循环中的代码执行。

功能

void rentFilm(char* filmId, char* custId, char* rentDate, char* dueDate, int numFilm)
{
    //orderedList <filmType> orderedList(numFilm);
    //filmType newItem;
    int index = 0;
    bool found = false;

    while (index < orderedList.getLength() && !found)
        {
            cout << "test" << endl;
        if (strncmp(filmId,orderedList.getAt(index).number,6) == 0 && strncmp("0000",orderedList.getAt(index).rent_id,5) == 0)//If that film is rented by NO customer
            {
                cout << "test" << endl;
                found = true;//customer can rent it
                strcpy(newItem.number,filmId);
                orderedList.retrieve(newItem);
                orderedList.remove(newItem);
                strcpy(newItem.rent_id,custId);
                strcpy(newItem.rent_date,rentDate);
                strcpy(newItem.return_date,dueDate);
                orderedList.insert(newItem);
                cout << "Rent confirmed!" << endl;
            }
        else
            {
                if (strncmp(filmId,orderedList.getAt(index).number,6) > 0 || strncmp("0000",orderedList.getAt(index).rent_id,5) > 0)
                    {
                        ++ index;
                    }
                else
                    {
                     throw string ("Not in list");
                    }
            }
        }
}

在orderedList类中插入(确定长度)

template <class elemType>
void orderedList<elemType>::insert(const elemType& newItem)
{
     int index = length - 1;
     bool found = false;

     if (length == MAX_LIST)
         throw string ("List full - no insertion");

         // index of rear is current value of length

     while (! found && index >= 0)
        if (newItem < list[index])
        {
            list[index + 1] = list [index];  // move item down
            --index;
        }
        else
            found = true;

     list [index + 1] = newItem;  // insert new item
     ++length;
}
主要填写列表的

代码:

filmFile.open("films.txt", ios::in);
filmFile >> numFilm;
filmFile.get();

orderedList <filmType> orderedList(numFilm);
filmType newItem;

readString(filmFile, newItem.number,5);
    for (int i = 0; i < numFilm; i++)
    {
         newItem.copy = filmFile.get();
     readString(filmFile, newItem.title,30);
         readString(filmFile, newItem.rent_id,4);
         readString(filmFile, newItem.rent_date,8);
         readString(filmFile, newItem.return_date,8);
         filmFile.get();

         orderedList.insert (newItem);//puts filmType struct into the ordered list.

         readString(filmFile, newItem.number,5);
    }

如果程序中其他任何地方的代码有助于评估此错误,请告诉我。

3 个答案:

答案 0 :(得分:1)

看起来,您注释掉的行声明了一个与类同名的变量。

因此,当您对其进行注释时,将调用该类的静态函数。

将声明更改为:

orderedList<filmType> filmList(numFilm);

然后将函数中orderedList的所有引用更改为filmList

答案 1 :(得分:0)

您是否正在创建与模板同名的变量?当你说,

orderedList<filmType> orderedList(numFilm);

那种(有点)喜欢说,

int int=42;

然后期望int+1返回43

尝试类似的事情,

orderedList<filmType> ol(numFilm);

将所有其他对orderedList的引用改为ol

答案 2 :(得分:0)

您似乎在orderedList中填充变量main(),然后在您使用相同名称声明时,希望它在rentFilm(...)中自动可用;这是不可能的。您必须将对象从main()或更好地传递给函数,以使该函数成为class orderedList的成员方法:

int main ()
{
  orderedList<filmType> ol(numFilm); // variable name different (good practice)
  ... // all the populating
  orderedList.rentFilm(...);  // call the function like this
}

其中,rentFilem()现在是class

的一部分
class orderedList {
...
public:
  void rentFilm(char* filmId, char* custId, char* rentDate, char* dueDate, int numFilm);
};

现在在函数内部,您不必为orderedList声明变量;只需使用this-><method/variable>。它应该工作。