我正在尝试在模板之外声明一个成员函数 - 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;
}
答案 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; }