0

我正在实现一个模板类,但我不确定我的签名是否正确。下面我包含了我的代码示例,显示了我担心的几种情况:

我的地图.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 ‘&lt;’ token
4

1 回答 1

2

#include mymap.h从_mymap.cpp

然后

#include "mymap.h"

test.cpp

并编译它

g++ -g test.cpp

对于模板类,所有内容都必须在标题中。

于 2013-04-08T23:54:17.143 回答