где ошибка в этой программе на С++ (см. внутри) и как её исправить?

программирование С++

Вот собственно код:
#include <iostream.h>
#include <cstddef.h>

struct TreeNode {
int key;
TreeNode *pLeft;
TreeNode *pRight;
}

void AddTree(TreeNode, int); //- Здесь 2 ошибки: " E2176 Too many types in declaration at line 10 " и еще одна " E2111 Type 'TreeNode' may not be defined here at line 10"
void SumTree(TreeNode);
void DeleteTree(TreeNode);

void main()
{
TreeNode *pElTree=NULL;
int ElTreeKey;
for (ElTreeKey=0; ElTreeKey<10; ElTreeKey++)
{
cout << "Vvedite " << ElTreeKey+1 << "-y elment dereva:\n";
cin >> ElTreeKey;
AddTree(*pElTree, ElTreeKey);
}
SumTree(*pElTree);
DeleteTree(*pElTree);
}

void AddTree(TreeNode *pElTree, int key)
{
if (pElTree==0)
{
pElTree = new TreeNode;
pElTree->key=key;
pElTree->pLeft=NULL;
pElTree->pRight=NULL;
}
else if (key==pElTree->key)
cout << "Oshibka! Takoi element uge est'!\n";
else if (key<pElTree->key)
AddTree(pElTree->pLeft, key);
else
AddTree(pElTree->pRight, key);
}

void SumTree(TreeNode *pElTree)
{
int sumtree=0;
if(pElTree!=0)
{
sumtree += pElTree->key;
SumTree(pElTree->pLeft);
SumTree(pElTree->pRight);
}
cout << "Summa elementov dereva: " << sumtree << endl;
}

void DeleteTree(TreeNode *pElTree)
{
if (pElTree!=0)
{
DeleteTree(pElTree->pLeft);
DeleteTree(pElTree->pRight);
delete pElTree;
}
}


что я не так сделал? Прога по идее должна высчитывать сумму элементов бинарного дерева...

Примечание:
поставил после struct ; теперь выдало что-то вообще ужасное:
Error: Unresolved external 'AddTree(TreeNode, int)' referenced from C:\USERS\АНТОН\CBPROJECT\PROJECT_1\WINDOWS\DEBUG_BUILD\FILE1.OBJ

Error: Unresolved external 'SumTree(TreeNode)' referenced from C:\USERS\АНТОН\CBPROJECT\PROJECT_1\WINDOWS\DEBUG_BUILD\FILE1.OBJ

Error: Unresolved external 'DeleteTree(TreeNode)' referenced from C:\USERS\АНТОН\CBPROJECT\PROJECT_1\WINDOWS\DEBUG_BUILD\FILE1.OBJ
Ответы:
После struct TreeNode {...} точку с запятой поставь.
У меня собралось (но выдало сумму элементов дерева 0) после такого патча:
--- testorig.cpp        2010-01-22 09:57:31.000000000 +0300                                      
+++ test.cpp    2010-01-22 09:56:44.000000000 +0300                                              
@@ -1,17 +1,16 @@                                                                                
#include <iostream.h>                                                                          
-#include <cstddef.h>                                                                            
                                                                                               
-struct TreeNode {                                                                              
+typedef struct TreeNode {                                                                      
 int key;                                                                                      
 TreeNode *pLeft;                                                                              
 TreeNode *pRight;                                                                              
-}                                                                                              
+} TreeNode;                                                                                    
                                                                                               
-void AddTree(TreeNode, int); //- Здесь 2 ошибки: " E2176 Too many types in declaration at line 10 " и еще одна " E2111 Type 'TreeNode' may not be defined here at line 10"
-void SumTree(TreeNode);                                                                        
-void DeleteTree(TreeNode);                                                                      
+void AddTree(TreeNode*, int);                    
+void SumTree(TreeNode*);                                                                        
+void DeleteTree(TreeNode*);                                                                    
                                                                                               
-void main()                                                                                    
+int main()                                                                                      
{                                                                                              
 TreeNode *pElTree=NULL;                                                                        
 int ElTreeKey;                                                                                
@@ -19,10 +18,10 @@                                                                              
 {                                                                                              
   cout << "Vvedite " << ElTreeKey+1 << "-y elment dereva:\n";                                  
   cin >> ElTreeKey;                                                                            
-   AddTree(*pElTree, ElTreeKey);                                                                
+   AddTree(pElTree, ElTreeKey);                                                                
 }                                                                                              
- SumTree(*pElTree);                                                                            
- DeleteTree(*pElTree);                                                                          
+ SumTree(pElTree);                                                                              
+ DeleteTree(pElTree);                                                                          
}                                                                                              
                                                                                               
void AddTree(TreeNode *pElTree, int key)
Ошибок много.
Во-первых намудрено с указателями,которые передаются в ф-ции.В одном передаёшь указатель,в другом нет.
Сумма в рекурсивных ф-циях так не считается.Она у тебя при погружении каждый раз обнуляется.Нужно при каждом вызове рекурсии передавать в ф-цию ссылку на сумму.Тогда она будет суммироваться.
Но главное,неправильно написан алгоритм добавления элеменов в дерево.Вершину дерева нельзя создавать локально.При выходе из ф-ции она пропадает и теряется указатель на вершину дерева.Его нужно создать отдельно,а потом уже передать в Add(root).Далее в ф-ции идёт поиск самого нижнего элемента и этот элемент добавляется в цепочку.
Я переделал код.Разбери и сравни со своим.
#include <iostream>
//#include <cstddef.h>
using  namespace std;


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.