Форум программистов, компьютерный форум CyberForum.ru

Вызов функций класса Dictionary функциями дружественного класса - C++

Восстановить пароль Регистрация
 
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
22.10.2012, 01:26     Вызов функций класса Dictionary функциями дружественного класса #1
Функции класса Tree используют функции дружественного класса Dictionary,но вылетают ошибки,не находятся определения функций класа Dictionary,которые вызываются
Errors
1>d:\projects\dictionary\dictionary\exdict.h(53): error C2079: "Dictionary:ataTree" использует неопределенный class "Tree"
1>d:\projects\dictionary\dictionary\tree.cpp(186): warning C4805: ==: небезопасное смешение типа "'unknown-type'" и типа "bool" в операции
1>d:\projects\dictionary\dictionary\tree.cpp(186): error C3861: WriteNewAssociatedWord: идентификатор не найден
1>d:\projects\dictionary\dictionary\tree.cpp(235): warning C4805: ==: небезопасное смешение типа "'unknown-type'" и типа "bool" в операции
1>d:\projects\dictionary\dictionary\tree.cpp(235): error C3861: WriteNewID: идентификатор не найден
1> ExMenuForDictionary.cpp
1>d:\projects\dictionary\dictionary\tree.h(12): error C2653: Dictionary: не является именем класса или пространства имен
1>d:\projects\dictionary\dictionary\tree.h(13): error C2653: Dictionary: не является именем класса или пространства имен
1>d:\projects\dictionary\dictionary\exmenufordictionary.cpp(66): warning C4018: <=: несоответствие типов со знаком и без знака
1> ExMenu.cpp
1>d:\projects\dictionary\dictionary\tree.h(12): error C2653: Dictionary: не является именем класса или пространства имен
1>d:\projects\dictionary\dictionary\tree.h(13): error C2653: Dictionary: не является именем класса или пространства имен
1> Dict_Test.cpp
1>d:\projects\dictionary\dictionary\tree.h(12): error C2653: Dictionary: не является именем класса или пространства имен
1>d:\projects\dictionary\dictionary\tree.h(13): error C2653: Dictionary: не является именем класса или пространства имен

Tree.h
#ifndef TREE_H
#define TREE_H

#include "StdAfx.h"
#include "TreeNode.h"
#include "ExDict.h"

class Tree
{
friend class Tree;

friend bool Dictionary::WriteNewAssociatedWord(string NewAssociatedWord,unsigned int position);
friend bool Dictionary::WriteNewID(ID NewID,unsigned int position);

public:
Tree();
int InsertNode(DATA NewNode);
int InsertAssociatedWord(string NewAssociatedWord, string PrimaryWord);
int InsertNewID(ID NewID, string PrimaryWord);
int FindWord(string Word,DATA WordData);

private:
TreeNode RootNode;
unsigned int CountOfWords;
};

#endif TREE_H

Tree.cpp
int Tree::InsertAssociatedWord(string NewAssociatedWord,string PrimaryWord)
{
int bRes = 1;

TreeNode CurrentNode = RootNode;

while(true)
{
if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) == 0)
break;


if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) < 0)
CurrentNode = *(CurrentNode.rightPtr);


if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) > 0)
CurrentNode = *(CurrentNode.leftPtr);

}


if(CurrentNode._data.CountOfAssociatedWords == 5)
{bRes = 2; return bRes;}

CurrentNode._data.AssociatedWords.push_back(NewAssociatedWord);
CurrentNode._data.CountOfAssociatedWords++;


if(WriteNewAssociatedWord(NewAssociatedWord,CurrentNode._data.position) == true)//вот здесь и ошибка
{
cout << "" << endl;

bRes = 1;
return bRes;
}
else
{
cout << "" << endl;

bRes = 0;
return bRes;
}
}
//-----------------------------------------------------------------------------------------


//
//-----------------------------------------------------------------------------------------
int Tree::InsertNewID(ID NewID, string PrimaryWord)
{
int bRes = 1;

TreeNode CurrentNode = RootNode;

while(true)
{
if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) == 0)
break;

if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) < 0)
CurrentNode = *CurrentNode.rightPtr;

if(strcmp(CurrentNode._data.MainWord.c_str(),PrimaryWord.c_str()) > 0)
CurrentNode = *CurrentNode.leftPtr;
}

if(CurrentNode._data.CountOfID == 3)
{
cout << "" << endl;

bRes = 2;
return bRes;
}

CurrentNode._data.CountOfID++;
CurrentNode._data.id.push_back(NewID);

if(WriteNewID(NewID,CurrentNode._data.position) == true)//вот здесь и ошибка
{
cout << "" << endl;

bRes = 1;
return bRes;
}
else
{
cout << "" << endl;

bRes = 0;
return bRes;
}

return true;

}

Dictionary.h
#ifndef DICTIONARY_H
#define DICTIONARY_H

#include "StdAfx.h"
#include "Tree.h"

class Dictionary
{
friend class Tree;

public:

Dictionary();

//
//---------------------------
bool NewPrimaryWord();//
bool NewAssociatedWord();//
bool correct(const ID &id);//
bool DeleteWord();//
//---------------------------

//
//---------------------------
bool LoadData();//
bool WriteData(DATA New);//
bool LoadInfo();//
bool WriteInfo(string NewDictionary);//
bool WriteNewAssociatedWord(string NewAssociatedWord,unsigned int position);
bool WriteNewID(ID NewID,unsigned int position);
//---------------------------

//
void Print(int count = 0);//

//
//---------------------------
bool CreateDictionary();//
bool DeleteDictionary();//
//---------------------------

//
//---------------------------
void MainMenu();//
void MenuForDictionary();//
//---------------------------

private:
vector<DATA> ListOfData;//
string CurrentFile;//
unsigned int CountOfWords;//

Tree DataTree;

unsigned int CountOfFiles;//
vector<string> ListOfFiles;//
};

#endif DICTIONARY_H
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
22.10.2012, 02:06     Вызов функций класса Dictionary функциями дружественного класса #2
это что?

C++
1
2
3
class Tree
{
friend class Tree;
сам с собой дружит?
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
22.10.2012, 02:11  [ТС]     Вызов функций класса Dictionary функциями дружественного класса #3
Цитата Сообщение от defer Посмотреть сообщение
Код C++
class Tree
{
friend class Tree;
извиняюсь,в последней строке должно быть Dictionary

Добавлено через 3 минуты
Цитата Сообщение от defer Посмотреть сообщение
Код C++

class Tree;
class Dictionary
{
friend class Tree;
всё равно те же ошибки
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
23.10.2012, 09:10  [ТС]     Вызов функций класса Dictionary функциями дружественного класса #4
если в Tree.h записать так
C++
1
2
3
4
5
6
7
8
9
class TreeNode;
class Dictionary;
 
class Tree
{
//friend class Dictionary;
 
friend bool WriteNewAssociatedWord(string NewAssociatedWord,unsigned int position);
friend bool WriteNewID(ID NewID,unsigned int position);
то есть лишь одна ошибка,но ведь нужно указывать,что эти функции-функции класса Dictionary
1>d:\projects\dictionary\dictionary\exdict.h(55): error C2079: "Dictionary:ataTree" использует неопределенный class "Tree"
Yandex
Объявления
23.10.2012, 09:10     Вызов функций класса Dictionary функциями дружественного класса
Ответ Создать тему
Опции темы

Текущее время: 15:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru