0

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

我收到错误:main.cpp|16|error: redefinition of 'GenericType Test::GetValue()'| |错误: '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

4 回答 4

7

更改成员函数定义

GenericType GetValue(){}

到成员函数声明

GenericType GetValue();
于 2013-09-18T15:01:37.730 回答
2

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

做就是了:

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

     GenericType GetValue();
     //                    ^
};
于 2013-09-18T15:02:47.203 回答
1
GenericType GetValue(){}

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

GenericType GetValue();

这是一个声明。

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

GenericType GetValue() const { return x; }
于 2013-09-18T15:15:47.670 回答
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;
}

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

GenericType GetValue();

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

于 2013-09-18T15:04:58.917 回答