4

C ++クラスの宿題では、リンクリストのデータ構造を作成する必要があります。現在、2つのクラスがあります。Listクラス(テンプレートクラス)とLinkクラス。LinkクラスはListクラス内にネストされていますが、別のヘッダーファイルで定義しようとしています。私が抱えている問題は、リンクプロセスがどのように機能するかについての理解の欠如から来ています。これが私が持っているものです。

List.hの内容

#ifndef _LIST_H_
#define _LIST_H_

template <class T>
class List
{
protected:
  class Link;

public:
  List() : _head(nullptr) { }
  ~List() { }

  void PushFront(T object)
  {
    // !! Attention !!
    // When I uncomment this line I get the error:
    // error C2514: 'List<T>::Link' : class has no constructors...
    // My problem is the compiler doesn't know what Link is yet (I'm assuming).

    //_head = new Link(object, _head);
  }

protected:
  Link* _head;
};

#endif // _LIST_H_

Link.hの内容

#ifndef _LINK_H_
#define _LINK_H_

#include "List.h"

template <class T>
class List<T>::Link
{
public:
  Link(T object, Link* next = nullptr)
    : _object(object), _next(next) { }
  ~Link() { }


private:
  T     _object;
  Link* _next;
};

#endif // _LINK_H_

main.cpp(エントリポイント)の内容

#include "List.h"

int main()
{
  int b = 5;
  List<int> a;
  a.PushFront(b); // If I comment this line, then the code compiles fine.
}

これは、発生しているリンクエラーであると確信しています。私が調べたMicrosoftのサイト(http://msdn.microsoft.com/en-us/library/4ce3zbbc.aspx)でのこのエラーと同様に、しかし、それを解決する方法がわかりません。

4

1 に答える 1

1

がどのように#include行われるかについては、コンパイラは調べていLink.hません。そのため、必要なクラスを見つけて生成することはできません。

于 2012-04-22T15:41:18.120 に答える