1

テンプレート クラスのセンチネル ノードを作成する必要があるという要件があります。それ自体への参照が必要なもの

template <class T1, class T2>
class Node{
   private:
      std::pair<T1, T2> _pair;
      Node * next;
   public:
      Node(std::pair<T1, T2> pair) : _pair(pair){}
};

class Product{
  private:
    int pid;
    std::string name;
  public:
    Product(int id, std::string name):pid(id), name(name){}
}

今、私は次のようなことをしたい

Node<Product, int> *base = new Node<Product, int>(/*which needs an arguement*/);

そして、渡す必要はありません。デフォルトのコンストラクターが利用できないことがわかります。

スキップリストを作成するために必要です。境界歩哨が必要です。

4

1 に答える 1

0

私があなたの問題を正しく理解しているなら、あなたがしなければならないことは、デフォルトのコンストラクターを定義することだけのように思えますか?

#include <string>
#include <utility>

template <class T1, class T2>
class Node{
private:
  std::pair<T1, T2> _pair;
  Node * next;
public:
  Node() {} // EDIT
  Node(std::pair<T1, T2> pair) : _pair(pair){}
};

class Product{
private:
  int pid;
  std::string name;
public:
  Product() {} // EDIT
  Product(int id, std::string name):pid(id), name(name){}
};

int main() {
  Node<Product, int> *base = new Node<Product, int>(/*which needs an arguement*/);
}

上記はコンパイルして正常に実行されます。単純化しすぎている場合はご容赦ください。

于 2016-03-10T20:08:32.243 に答える