C ++ templated friend class

I am trying to write an implementation of a 2-3-4 tree in C ++. I have been using the templates for some time now and am getting some errors. Here is my extremely basic code structure:
node.h:

#ifndef TTFNODE_H #define TTFNODE_H template <class T> class TreeNode { private: TreeNode(); TreeNode(T item); T data[3]; TreeNode<T>* child[4]; friend class TwoThreeFourTree<T>; int nodeType; }; #endif 

node.cpp

 #include "node.h" using namespace std; template <class T> //default constructor TreeNode<T>::TreeNode(){ } template <class T> //paramerter receving constructor TreeNode<T>::TreeNode(T item){ data[0] = item; nodeType = 2; } 

TwoThreeFourTree.h

 #include "node.h" #ifndef TWO_H #define TWO_H enum result {same, leaf,lchild,lmchild,rmchild, rchild}; template <class T> class TwoThreeFourTree { public: TwoThreeFourTree(); private: TreeNode<T> * root; }; #endif 

TwoThreeFourTree.cpp:

 #include "TwoThreeFourTree.h" #include <iostream> #include <string> using namespace std; template <class T> TwoThreeFourTree<T>::TwoThreeFourTree(){ root = NULL; } 

And main.cpp:

 #include "TwoThreeFourTree.h" #include <string> #include <iostream> #include <fstream> using namespace std; int main(){ ifstream inFile; string filename = "numbers.txt"; inFile.open (filename.c_str()); int curInt = 0; TwoThreeFourTree <TreeNode> Tree; while(!inFile.eof()){ inFile >> curInt; cout << curInt << " " << endl; } inFile.close(); } 

And when I try to compile from the command line: g ++ main.cpp node.cpp TwoThreeFourTree.cpp

I get the following errors:

 In file included from TwoThreeFourTree.h:1, from main.cpp:1: node.h:12: error: 'TwoThreeFourTree' is not a template main.cpp: In function 'int main()': main.cpp:13: error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class TwoThreeFourTree' main.cpp:13: error: expected a type, got 'TreeNode' main.cpp:13: error: invalid type in declaration before ';' token In file included from node.cpp:1: node.h:12: error: 'TwoThreeFourTree' is not a template In file included from TwoThreeFourTree.h:1, from TwoThreeFourTree.cpp:1: node.h:12: error: 'TwoThreeFourTree' is not a template 

My main question is why he says “mistake:“ TwoThreeFourTree is not a template. ”Anyone have any ideas? Thanks for all the advice / help in advance ... Dan

+4
source share
2 answers

You just need to declare it as a template when you use the friend keyword. You are using the wrong syntax to declare a friend in your code. What do you want to write:

 template <class U> friend class TwoThreeFourTree; 
+5
source

The solution that was made has a slight problem when opening your class for any instance of the TwoThreeFourTree template, and not just for those that use the same instance type.

If you only want to open the class for instances of the same type, you can use the following syntax:

 template <typename T> class TwoThreeFourTree; // forward declare the other template template <typename T> class TreeNode { friend class TwoThreeFourTree<T>; // ... }; template <typename T> class TwoThreeFourTree { // ... }; 
+7
source

All Articles