C ++模板成员函数未在此范围内声明

时间:2014-05-08 15:12:57

标签: c++ class templates

我试图创建一个链接列表,但是当我运行IsEmpty(测试)时,它只是说它未在此范围内声明,即使它是公开的。

我在模板方面很陌生,但我无法在谷歌找到答案,所以我不得不在这里问一下。有谁知道问题是什么?

此外,错误指向main(),我调用IsEmpty()

//.h
template <typename ItemType>
class Node
{
    public:
        ItemType Data;
        Node <ItemType> *next;
        int position;
};

template <typename ItemType>
class Linked_List
{
        public:
        Node <ItemType> *start;
        Linked_List();
        bool IsEmpty();
}


//.cpp  
#include "Linked_List.h"
#include <iostream>
#include <cstdlib>
using namespace std;

template <typename ItemType>
Linked_List <ItemType>::Linked_List(){
    start = NULL;
}

template <typename ItemType>
bool Linked_List <ItemType>::IsEmpty(){
    if (start == NULL){
        return true;
    }
    return false;
}

int main(){
    Linked_List <int> test;
    cout << IsEmpty(test) << endl;   //error points to here
}

3 个答案:

答案 0 :(得分:2)

调用成员函数的正确方法是obj.function(...)。你需要:

cout << test.IsEmpty() << endl;   //error points to here

答案 1 :(得分:1)

必须在头文件中声明和定义模板。

答案 2 :(得分:0)

模板标头不能用作非模板标头。您必须在标题内定义模板函数。只需将.CPP文件中的定义移动到.h文件的末尾即可。

完成后,您可以从您创建的对象中调用该函数。