我的成员模板功能声明有什么问题?

时间:2013-09-18 14:59:29

标签: c++

我正在尝试在模板之外声明一个成员函数 - GetValue。

我收到错误: main.cpp | 16 |错误:重新定义'GenericType Test :: GetValue()'| | error:'GenericType Test :: GetValue()'先前在此处声明|

#include <iostream>

template <class GenericType>
class Test {
public:
        GenericType x;
        Test(){        }

        Test(int y) : x(  y){ }

        GenericType GetValue(){}
};


template <class GenericType>
GenericType Test<GenericType>::GetValue(){
    return x;

}

int main()
{

    Test<int> y(5);
    std::cout << y.GetValue();
    return 0;
}

4 个答案:

答案 0 :(得分:7)

更改成员函数定义

GenericType GetValue(){}

到成员函数声明

GenericType GetValue();

答案 1 :(得分:2)

在您的班级声明中,您已经定义了GetValue()方法。

只是做:

template <class GenericType>
class Test {
public:
     // ...

     GenericType GetValue();
     //                    ^
};

答案 2 :(得分:1)

好的,你在代码中定义2点函数:

template <class GenericType>
class Test {
public:
        GenericType x;
        Test(){        }

        Test(int y) : x(  y){ }

        GenericType GetValue(){} //<--here
};


template <class GenericType>
GenericType Test<GenericType>::GetValue(){ // <- and Here!
    return x;

}

int main()
{

    Test<int> y(5);
    std::cout << y.GetValue();
    return 0;
}

第一个定义应该是声明,更改{}为a;

GenericType GetValue();

现在你说这个函数将在后面的代码中定义

答案 3 :(得分:1)

GenericType GetValue(){}

这不是声明,这是声明和定义。

GenericType GetValue();

这是一份声明。

此外,您应该尽可能添加const。像这样:

GenericType GetValue() const { return x; }