做我的作业,卡在模板功能部分。我的main()
文件中有以下.cpp
:
int main()
{
Pair<char> letters('a', 'd');
cout << "\nThe first letter is: " << letters.getFirst();
cout << "\nThe second letter is: " << letters.getSecond();
cout << endl;
system("pause");
return 0;
}
我需要使用template
使class
成为可取的,这就是我在.h
文件中的内容:
template <class T>
class Pair
{
private:
T letters;
public:
T getFirst();
T getSecond();
};
现在,在我的VS中,它表示找不到getFrist()
和getSecond()
。我如何在class
中将{T}作为template
传递?
答案 0 :(得分:4)
您的Pair<T>::getFirst
文件中的getSecond
/ .h
没有实施,是吗?这是一个常见的陷阱;你的编译器需要“看到”编译时的Pair<char>::getFirst()
实际上是什么。
当你把对象放在一起,链接各个编译单元时,已经太晚了。
因此,将模板方法的实现放在标题中。
另外,不要重新发明轮子。 char letters[2]
与您的对一样有用,如果您确实需要键/值对,std::pair
就是您想要的 - 它甚至是关联容器的核心,如std::map
。