2013-11-15 106 views
0

嗯,我已檢查缺少分號,並據我所知,我沒有任何包含循環,所以我有點難住。我一直在看其他發佈的例子,但我仍然不太明白我錯過了什麼。我猜測這是使用我沒有處理好的模板的問題,但我真的不知道。預期的類名前「{」令牌錯誤

In file included from customtester.cpp:6:0: 
MyBSTree.h:23:1: error: expected class-name before â{â token 

文件:

#ifndef MYBSTREE_H 
#define MYBSTREE_H 

template <typename T>  //not sure which of these I need, 
class AbstractBSTree;  //the include, the forward 
#include "abstractbstree.h" //declaration, or both. 

template <typename T> 
class TreeNode 
{ 
    T m_data; 
    TreeNode<T> * m_right; 
    TreeNode<T> * m_left; 

}; 

template <typename T> 
class MyBSTree:public AbstractBSTree //this would be line 23 
{ 
    TreeNode<T> * m_root; 
    int m_size; 
}; 

#endif 

什麼我失蹤?我不能修改「abstractbstree.h」

+3

僅供參考,通常包括頭文件是第一次在文件中。 –

+0

這個類是什麼「AbstractBSTree」定義的? –

+0

AbstractBSTree在abstractbstree.h中定義,它是一個純虛擬模板類。格倫抓住了我下面丟失的東西。 – cts28d

回答

2

嘗試:

public AbstractBSTree<T> 

編譯器將承擔<T>只有一個模板體內,並且只能用於模板類,而不是在公共空間

+0

就是這樣。我認爲這可能是我忘了模板的東西。謝謝。 – cts28d

+0

@ user2995084並且您需要類定義,而不僅僅是前向聲明。據推測,這是你正在問包括頭。 – juanchopanza

+0

@juanchopanza - 我們可以安全地假設它在包含文件中 –

2

你缺少<T>

由於AbstractBSTree是一個模板類,你需要指定模板參數時,你從中獲得了MyBSTree:

template <typename T> 
class MyBSTree:public AbstractBSTree<T> // <-- Use <T> here 
{ 
    TreeNode<T> * m_root; 
    int m_size; 
}; 
相關問題