1

編集:すべてを最初から再起動した後、修正しました。何が問題を引き起こしたのかわかりません。主な問題の原因について何らかの考えや洞察を誰かが持っている場合は、フォローアップで最初の投稿を編集します.

そのため、数値データと文字列の両方を使用できるようにテンプレートを利用するヒープ クラスを作成する宿題をしています。私が使用しているコンパイラは、Visual Studio 2010 です。

ヘッダーファイルは次のようになります。

#ifndef HEAP_H
#define HEAP_H

#include <iostream>
#include <vector>       // not needed if you use a static array

using std::cout;
using std::endl;
using std::vector;
template <typename type>
class Heap {
... the method headers I have to implement in the Heap.template file
};
#include "Heap.template"

#endif

Heap.template ファイルは、ヒープのメソッドを実装する場所です。しかし、エラーに悩まされずにコンパイルすることはできません。インストラクター自身が提供する最初の方法は次のとおりです。

template <typename type>
Heap<type>::Heap(bool maxheap) {
// this default constructor supports a dynamic array. In this array, the root
// of the heap begins at index 1; the variable "dummy" is used to fill the 
// zero position of the dynamic array.  
type dummy;
  this->maxheap = maxheap;
  heap.push_back(dummy);
  size = heap.size()-1;
}

実装した残りのメソッドをコメントアウトしても、まだエラーが表示されます

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-     int
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<'

オンラインで

Heap<type>::Heap(bool maxheap) {

これらの同じエラーのセットは、提供された .template ファイルに実装しようとするすべてのメソッド (たとえば、この print メソッド) に存在します。

template <typename type>
void Heap<type>::PrintHeap()
{
for( std::vector<type>::iterator i = heap.begin(); i != heap.end(); ++i)
{
    cout << *i << ' ';
}
}

彼が提供したメソッドと同じ一連のエラーが表示されます。私は現時点で本当に困惑しており、何が問題を引き起こしているのか本当にわかりません. いくつかの洞察をいただければ幸いです、ありがとう!

4

1 に答える 1

0

<type>メンバー関数を定義するときは、クラスに含めないでください。これを行う:

template <typename type>
Heap::Heap(bool maxheap) {
    //...
}

templateコンパイラは、ステートメントにより、クラスがこれらのテンプレート パラメーターを使用していることを既に認識しています。

于 2013-11-15T00:57:09.050 に答える