講師がクラスAvlTreeを定義するヘッダファイルを提供しましたが、なんらかの理由でmain()でオブジェクトを通常宣言できません。私は間違って何をしていますか?ここでは、ヘッダファイルの関連部分は次のとおりです。このヘッダファイルを使用してオブジェクトを宣言するにはどうすればよいですか? (テンプレート引数が見つからない)
#ifndef AVL_TREE_H
#define AVL_TREE_H
#include <iostream> // NULL, cin, cout
using namespace std;
template <typename Comparable>
class AvlTree
{
public:
AvlTree() : root(NULL)
{ }
AvlTree(const AvlTree & rhs) : root(NULL)
{
*this = rhs;
}
private:
struct AvlNode
{
Comparable element;
AvlNode *left;
AvlNode *right;
int height;
AvlNode(const Comparable & theElement, AvlNode *lt,
AvlNode *rt, int h = 0)
: element(theElement), left(lt), right(rt), height(h) { }
};
AvlNode *root;
};
#endif
ここで私がメインでやろうとしているものです:
#include "AvlTree.h"
void readFile(AvlTree &t1, AvlTree &t2)
{
// do some stuff
return;
}
void splayAccess(AvlTree &t1, AvlTree &t2)
{
// do some stuff
return;
}
int main (void)
{
// object declarations
AvlTree tree1;
AvlTree tree2;
// function calls
readFile(tree1, tree2);
splayAccess(tree1, tree2);
return 0;
}
そして、ここでは、エラー(GNUコンパイラ)です:
[email protected]:~/3110/hw4$ g++ header.h mcve.cpp
mcve.cpp:3:15: error: variable or field ‘readFile’ declared void
mcve.cpp:3:23: error: missing template arguments before ‘&’ token
mcve.cpp:3:24: error: ‘t1’ was not declared in this scope
mcve.cpp:3:36: error: missing template arguments before ‘&’ token
mcve.cpp:3:37: error: ‘t2’ was not declared in this scope
mcve.cpp:9:18: error: variable or field ‘splayAccess’ declared void
mcve.cpp:9:26: error: missing template arguments before ‘&’ token
mcve.cpp:9:27: error: ‘t1’ was not declared in this scope
mcve.cpp:9:39: error: missing template arguments before ‘&’ token
mcve.cpp:9:40: error: ‘t2’ was not declared in this scope
mcve.cpp: In function ‘int main()’:
mcve.cpp:18:10: error: missing template arguments before ‘tree1’
mcve.cpp:18:10: error: expected ‘;’ before ‘tree1’
mcve.cpp:19:10: error: missing template arguments before ‘tree2’
mcve.cpp:19:10: error: expected ‘;’ before ‘tree2’
mcve.cpp:22:11: error: ‘tree1’ was not declared in this scope
mcve.cpp:22:18: error: ‘tree2’ was not declared in this scope
mcve.cpp:22:23: error: ‘readFile’ was not declared in this scope
mcve.cpp:23:26: error: ‘splayAccess’ was not declared in this scope
インストラクターが「using namespace std;」を含むヘッダーファイルを提供している場合は、あなたはこの任務より大きな問題を抱えています。 [あなたには無能なインストラクターがいる](http://stackoverflow.com/questions/18914106/what-is-the-use-of-using-namespace-std)。あなたは、このクラスに留まることによって、あなたの将来のキャリア見通しに不自由をしています。別のインストラクターを探してください。 "using namespace std;"ヘッダーファイル。良い悲しみ。逃げる。できるだけ早く。 –
感想をお寄せいただきありがとうございますが、これは私の問題を解決するうえでは必ずしも役に立ちません。 –
@Sam Varshavchik多かれ少なかれ正確に投稿しようとしていました。あなたは私にそれを打つ。 –