سؤال

وأنا أحاول كتابة تنفيذ شجرة 2-3-4 في ج ++. أنا انه تم منذ بعض الوقت لقد استعملت القوالب، وأنا الحصول على بعض الأخطاء. وإليك إطار قانون الأساسي للغاية بلدي:
    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;
}

و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();
}

وعندما أحاول ترجمة من سطر الأوامر مع:      ز ++ MAIN.CPP node.cpp TwoThreeFourTree.cpp

وأحصل على الأخطاء التالية:

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  

وسؤالي الرئيسي هو السبب في انه قائلا: "الخطأ: 'TwoThreeFourTree' ليس قالب". هل لديها أي أفكار؟ شكرا لجميع النصائح / مساعدة مقدما ... دان

هل كانت مفيدة؟

المحلول

وتحتاج فقط لنعلن على أنها نموذج عند استخدام صديق الكلمة. كنت تستخدم جملة غير صحيح لإعلان صديق في التعليمات البرمجية. ما كنت تريد أن تكتب هو:

template <class U> friend class TwoThreeFourTree;

نصائح أخرى

والحل الذي تم قبوله لديه مشكلة طفيفة فتح صفك لأي مثيل من القالب TwoThreeFourTree، وليس فقط تلك التي تشترك في نفس النوع مثيل.

إذا كنت تريد فقط لفتح فئة لالتجسيدات من نفس النوع يمكنك استخدام بناء الجملة التالي:

template <typename T> class TwoThreeFourTree; // forward declare the other template
template <typename T>
class TreeNode {
   friend class TwoThreeFourTree<T>;
   // ...
};
template <typename T>
class TwoThreeFourTree {
   // ...
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top