Даже не знаю как точно назвать тему, толком не пойму почему не компилируется
У меня есть 3 класса в TTextLink перегружены операции выделения и удаления памяти(new, delete) из-за этого псевдо сборщика мусора получается какая то каша из классов, что даже я сам толком не понимаю что там толком. TTextLink - звено "текста", для данного текста реализовано, что то вроде сборщика мусора
| Код |
#include "TTextMem.h" #include <iostream> #include <string.h>
using namespace System; using namespace std; class TText; class TTextLink { static TTextMem Mem; public: int tab_l; TTextLink* pNext; TTextLink* pDown; string str; TTextLink(){pNext=pDown = NULL; tab_l = 0;} void* operator new(size_t size); void operator delete(void* p); static void InitMem(int size = 100); static void CleanerMem(const TText &txt); bool IsAtom(); friend class TText;
}; void TTextLink::operator delete(void *p) { TTextLink* pLink = (TTextLink*)p; pLink->pNext = Mem.pFree; Mem.pFree = pLink; } void TTextLink::InitMem(int size) { Mem.pFirst = (TTextLink*)new char[size*sizeof(TTextLink*)]; // Никак не вспомню что за махинации производим с char //char = 1байт Mem.pFirst = new TTextLink[size] ????????????// Наверное это из-за перегруженного new!!! Mem.pFree = Mem.pFirst; Mem.pLast = Mem.pFirst +(size-1); TTextLink* pLink = Mem.pFirst; for(int i=0;i<size-1; i++,pLink++) pLink->pNext=pLink+1; pLink->pNext = NULL;//туда указывает последнее звено списка памяти } void TTextLink::CleanerMem(const TText &txt) {
for(txt.Reset();!txt.IsEnd();txt.GoNext()) txt.SetLine("$€"+txt.GetLine()); TTextLink* pLink = Mem.pFree; while(pLink != NULL) pLink->str="$€"; //собственно осталось теперь только собрать мусор(не пусты и не используемые звенья) нет ссылок for(pLink = Mem.pFirst;pLink != Mem.pLast; pLink++) { if(strstr(pLink->str.c_str(),"$€")) { string temp; temp = pLink->str.substr(2,pLink->str.length()); pLink->str = temp; } else delete pLink; }
|
Класс управления памятью который как нам нужен для того что бы зарание выделенные звенья соеденить в линейный список и помечать какие свободные какие нет
| Код | #include "TTextLink.h" /* _______________________________ | | | | | | | | | | | | * | * | * | | | | | | | | ------------------------------------------------- ^ ^ ^ pFirst pFree pLast Даннй список стоим из тех же зевеньев TTextLink */ class TText; class TTextLink; class TTextMem { TTextLink* pFirst, *pFree, *pLast; friend class TTextLink; // когда калсс TTextLink состоит только из отркрытых полей и методов // тогда может делать его дружественным лишнее????? };
|
Класс Text
| Код | #include "TTextLink.h" #include <list> #include <stack> #include <string.h>
using namespace System; using namespace std; stack<TTextLink* ,list<TTextLink*> > _stack,_stackI; //Узнать для чего второй параметор, понятно что список но что дальше? //Стек для указателей при обходе списка
class TText { public: TTextLink* pFirst; TTextLink* pCurrent; TText( ){pFirst = NULL; pCurrent = NULL;} void GoNextLine( ); void GoDownLine( ); void GoPrevLine( ); void GoPrevSect( ); void SetLine(string line){pCurrent->str = line;} string GetLine(){return string(pCurrent->str);} void Reset(); int IsEnd(){return !_stackI.empty();} void GoNext(); void InsNextLine( string line ); void InsDownLine( string line ); void InsNextSect( string line ); void InsDownSect( string line ); void DelLine(); void DelSect();
};
|
И вот такая куча ошибок, где я не пойму почему для него TText не является типом
| Код | 1>TextR.cpp 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2027: use of undefined type 'TText' 1> e:\proglab\lang_c\textr\textr\TTextMem.h(14) : see declaration of 'TText' 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2228: left of '.Reset' must have class/struct/union 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2027: use of undefined type 'TText' 1> e:\proglab\lang_c\textr\textr\TTextMem.h(14) : see declaration of 'TText' 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2228: left of '.IsEnd' must have class/struct/union 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2027: use of undefined type 'TText' 1> e:\proglab\lang_c\textr\textr\TTextMem.h(14) : see declaration of 'TText' 1>e:\proglab\lang_c\textr\textr\TTextLink.h(63) : error C2228: left of '.GoNext' must have class/struct/union 1>e:\proglab\lang_c\textr\textr\TTextLink.h(64) : error C2027: use of undefined type 'TText' 1> e:\proglab\lang_c\textr\textr\TTextMem.h(14) : see declaration of 'TText' 1>e:\proglab\lang_c\textr\textr\TTextLink.h(64) : error C2228: left of '.SetLine' must have class/struct/union 1>e:\proglab\lang_c\textr\textr\TTextLink.h(64) : error C2027: use of undefined type 'TText' 1> e:\proglab\lang_c\textr\textr\TTextMem.h(14) : see declaration of 'TText' 1>e:\proglab\lang_c\textr\textr\TTextLink.h(64) : error C2228: left of '.GetLine' must have class/struct/union
|
|