templates - 无法将函数定义与现有声明匹配c ++

时间:2016-08-01 17:18:44

标签: c++ class templates compiler-errors syntax-error

我尝试使用模板,而且我完全没有模板。一旦我开始,我会得到一些错误,我不明白这是什么意思? 所以文本就在这里,我要做的是:

编写一个实现一组项目的基于模板的类。班级应该允许 用户来 一个。向集合中添加新项目。 湾获取集合中的项目数。 C。获取指向包含集合中每个项目的动态创建的数组的指针。该 此函数的调用者负责释放内存。

错误是:

Item :: output':无法将函数定义与现有声明匹配

Item :: in':无法将函数定义与现有声明匹配

添加':不是'Item

的成员

我的代码在这里:

#include <iostream>
using namespace std;

template<class T>
class Item {
private:
    Item();
    ~Item();
    void Add(T item);
    int get();
    void output(T array);
    bool in(T item);
    T *array;
    int element;
    int size;
};

template<class T>
Item<T>::Item()
{
    element = 0;
    size = 10;
    array = new T[size];
}

template<class T>
Item<T>::~Item()
{
    delete[] array;
}
template<class T>
void Item<T>::add(T item)
{
    if (in() == false)
    {
        size++;
        array[size] = Item;
    }
}

template<class T>
void Item<T>::in(T item)
{
    for (int i = 0; i < size; i++)
    {
        if (array[i] == Item)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

template<class T>
int Item<T>::get()
{
    return element;
}

template<class T>
void Item<T>::output()
{
    for (int i = 0; i < size; i++)
    {
        cout << array[i] << endl;
    }
}



int main()
{





    system("pause");
    return 0;

}

1 个答案:

答案 0 :(得分:0)

我继续并纠正了所有编译器错误,但请你再次学习你的文本框(或其他)。

我评论了你必须更换的你的行:

#include <iostream>
using namespace std;

template<class T>
class Item {
private:
    Item();
    ~Item();
    void Add(T item);
    int get();
//    void output(T array);
    void output();
    bool in(T item);
    T *array;
    int element;
    int size;
};

template<class T>
Item<T>::Item()
{
    element = 0;
    size = 10;
    array = new T[size];
}

template<class T>
Item<T>::~Item()
{
    delete[] array;
}
template<class T>
void Item<T>::Add(T item)
//void Item<T>::add(T item)
{
    if(in(item) == false)
//    if (in() == false)
    {
        size++;
//        array[size] = Item;
        array[size] = item;
    }
}

template<class T>
//void Item<T>::in(T item)
bool Item<T>::in(T item)
{
    for (int i = 0; i < size; i++)
    {
//        if (array[i] == Item)
        if(array[i] == item)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

template<class T>
int Item<T>::get()
{
    return element;
}

template<class T>
void Item<T>::output()
{
    for (int i = 0; i < size; i++)
    {
        cout << array[i] << endl;
    }
}



int main()
{
    system("pause");
    return 0;

}

但你没有读过编译器消息吗?我明白了:

C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp
main.cpp:32:15: error: out-of-line definition of 'add' does not match any declaration in 'Item<T>'; did you mean 'Add'?
void Item<T>::add(T item)
              ^~~
              Add
main.cpp:9:10: note: 'Add' declared here
    void Add(T item);
         ^
main.cpp:37:23: error: 'Item' does not refer to a value
        array[size] = Item;
                      ^
main.cpp:5:7: note: declared here
class Item {
      ^
main.cpp:42:15: error: return type of out-of-line definition of 'Item::in' differs from that in the declaration
void Item<T>::in(T item)
~~~~          ^
main.cpp:12:10: note: previous declaration is here
    bool in(T item);
    ~~~~ ^
main.cpp:46:25: error: 'Item' does not refer to a value
        if (array[i] == Item)
                        ^
main.cpp:5:7: note: declared here
class Item {
      ^
main.cpp:48:13: error: void function 'in' should not return a value [-Wreturn-type]
            return true;
            ^      ~~~~
main.cpp:52:13: error: void function 'in' should not return a value [-Wreturn-type]
            return false;
            ^      ~~~~~
main.cpp:64:15: error: out-of-line definition of 'output' does not match any declaration in 'Item<T>'
void Item<T>::output()
              ^~~~~~
7 errors generated.