2010-02-16 3 views
11

Я, честно говоря, понятия не имею, почему это происходит. Я проверил, дважды проверял и трехкратно проверял фигурные скобки, точки с запятой, перемещал конструкторы и т. Д., И это все равно дает мне эту ошибку.Ожидаемый конструктор, деструктор или преобразование типа перед токеном '*'

Соответствующий код следует.

BinTree.h

#ifndef _BINTREE_H 
#define _BINTREE_H 

class BinTree 
{ 
private: 
    struct Node 
    { 
     float data; 
     Node *n[2]; 
    }; 
    Node *r; 

    Node* make(float); 

public: 
    BinTree(); 
    BinTree(float); 
    ~BinTree(); 

    void add(float); 
    void remove(float); 

    bool has(float); 
    Node* find(float); 
}; 

#endif 

И BinTree.cpp

#include "BinTree.h" 

BinTree::BinTree() 
{ 
    r = make(-1); 
} 

Node* BinTree::make(float d) 
{ 
    Node* t = new Node; 
    t->data = d; 
    t->n[0] = NULL; 
    t->n[1] = NULL; 
    return t; 
} 
+2

Было бы полезно, если вы (а) копируется в полное сообщение об ошибке, (б) указал, где в коде это происходит и (с), который компилятор, на какой платформе вы» повторно используя. –

+0

Следует отметить, что ваши охранники не являются безопасными. Для компилятора зарезервировано имя, начинающееся с подчеркивания, отличного от большой буквы. Вы должны сделать что-то вроде изменения '_BINTREE_H' на' BINTREE_H' – GManNickG

ответ

21

Поскольку на линии:

Node* BinTree::make(float d) 

тип Node является членом class BinTree.

Сделать это:

BinTree::Node* BinTree::make(float d) 
+0

Geez, НЕ знал, что вам нужно это делать. Огромное спасибо за то, что вы меня поняли! – Freezerburn

+2

Это сложно. Интересно, что вам не нужно квалифицировать * параметры * с помощью типов «BinTree ::' - only return. –

+1

@j_random_hacker: параметр-объявление-предложение (и все, что является частью определения функции после идентификатора, который называет функцию), находится в «потенциальной сфере применения декларации» для определения класса (3.3.6/5 " Класс "). Другими словами, все члены класса находятся в области определения функций-членов * после * имени функции. Таким образом, тип возврата не может быть полезен в классе; это происходит слишком рано. C++ 0x имеет новый синтаксис * trailing-return-type *, который позволяет вам обойти это, но он действительно добавляется для вывода типов возврата в шаблонах. –

Смежные вопросы

 Смежные вопросы