地图模板类

123*_*678 3 c++ syntax templates class member-functions

我只是对文件的外观感到困惑。我不确定语法以及如何在数组中读取。

JeJ*_*eJo 5

我只是对我的Map.cpp文件应该是什么样子感到困惑。

  • 首先,您不能在.cpp文件中编写模板类实现。它应该全部在头文件中。阅读以下内容以获得更多信息。 为什么只能在头文件中实现模板?
  • 其次,您的Map类中没有构造函数声明std::string作为参数。提供一个!
    template <typename Domain, typename Range>
    class Map
    {
    public:  
     Map(const std::string& filename);  // declare one constructor which takes std::string
        // ... other members
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 第三,您的成员函数定义缺少模板参数。

    template <typename Domain, typename Range>  // ---> this
    void Map<Domain, Range>::add(Domain d, Range r)
    {
     // implementation
    }
    
    template <typename Domain, typename Range>  // ---> this
    bool Map<Domain, Range>::lookup(Domain d, Range& r)
    {
     // implementation
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后但并非最不重要的一点是,您缺少适当的析构函数,这对于Map该类而言至关重要,因为new应该释放分配的内存(使用)。因此,请相应地执行3/5/0的规则

话虽如此,如果您可以使用std::vector,则可以避免手动内存管理。

#include <vector>

template <typename Domain, typename Range>
class Map
{
public:
    //...
private:
    // other members
    std::vector<Domain> dArray;
    std::vector<Range> rArray;
};
Run Code Online (Sandbox Code Playgroud)

作为旁注,请避免使用using namespace std;为什么是“使用命名空间标准”;被认为是不良做法?

  • 第四:为什么要使用“ new []”?为什么不使用std :: vector呢?;-) [SO:new int \ [size \] vs std :: vector](/sf/answers/681907971/) (2认同)