синтаксическая ошибка в с ++ - PullRequest
0 голосов
/ 12 января 2012

i wana создать дерево bst в c ++, но у меня есть синтаксическая ошибка в этом коде:

#pragma once
#include "BSTNode.h"
using namespace std;

class BST
{
private:
    BSTNode* root;
public:
    BST(void);
    bool insert(int );
    int search(int);
    ~BST(void);
};

и BSTNode:

#pragma once
#include "BST.h"

class BST;

class BSTNode
{
    friend  class BST;
private:
    int data;
    BSTNode * LeftChild, *RightChild;
public:
    BSTNode(void);
    int getData();
    ~BSTNode(void);
};

моя ошибка:

Error   1   error C2143: syntax error : missing ';' before '*'

Я думаю dont есть ошибка. Пожалуйста, помогите мне!

Ответы [ 2 ]

3 голосов
/ 12 января 2012

У вас есть циклическое включение с 2 файлами, и из-за #Pragma оба файла включаются только один раз, и поэтому BSTNode сначала анализируется и включает в себя BST, но затем BST больше не включает BSTNode (потому что этооднажды)

это приводит к тому, что BST не знает, что такое BSTNode, решение будет следующим:

Удаление включения и вперед, объявляющее класс следующим образом:

#pragma once
using namespace std;

class BSTNode;  //Forward declare class so that BST knows BSTNode (move include to .cpp file)

class BST
{
private:
    BSTNode* root;
public:
    BST(void);
    bool insert(int );
    int search(int);
    ~BST(void);
};

Пример основной функции:

int main( int argc, const char* argv[] )
{
    printf( "\nHello World\n\n" );
}
0 голосов
/ 12 января 2012

объявление "BSTNode" без типа. Вам нужно объявить класс перед его использованием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...