我正在实现一个模板类,但我不确定我的签名是否正确。下面我包含了我的代码示例,显示了我担心的几种情况:
我的地图.h:
#ifndef MAP_H
#define MAP_H
#include <iostream>
#include <string>
using namespace std;
template <typename KEY, typename T>
class Map{
private:
struct Elem {
};
public:
Map();
// constructs empty Map
Map(const Map &rhs);
~Map();
Map& operator=(const Map &rhs);
bool insert(KEY, T);
T& operator[](KEY);
};
template<typename KEY, typename T>
ostream& operator<< (ostream&, const Map<KEY, T>&);
#include "mymap.cpp"
#endif
现在是 .cpp 文件:
#include mymap.h
#include <iostream>
#include <string>
using namespace std;
//Assingment Operator
template < typename KEY , typename T >
Map< KEY , T >& Map< KEY , T >::operator=(const Map &rhs){
//Avoid self assignment
if( this != &rhs ){
//Snip
}
return *this;
}
//Insert, return true if successful.
template < typename KEY , typename T >
bool Map< KEY , T >::insert(KEY, T){
//Snip
}
正如你所看到的,我相信你们都很清楚,模板签名可能会从我所读到的内容中变得非常混乱。这看起来是否正确,或者我是否有一些更熟练的眼睛很容易注意到的致盲错误?
我知道有一百万篇关于模板的帖子,我已经阅读了一些关于它们的指南,但在这个特定问题上我仍然找不到太多。
此外,在不可避免的“摆脱使用命名空间标准”注释出现之前,我将其包括在内以进行调试,它最终会消失,我保证:)
谢谢!
编辑:很抱歉造成混乱,我似乎错过了我帖子的一个非常重要的部分......错误!
我有大约 5 个,所有这些都有不同的行号:
mymap.cpp:41:1: error: ‘Map’ does not name a type
和相同数量的:
expected initializer before ‘<’ token