Харука-тян писал(а):extern помог, спасибо. Объяснение того, что значит #include тоже пригодится. А с виртуальными методами ничего не вышло.
А что не выходит с виртуальными кассами?
(далее мои коментарии не принимай близко к сердцу
)
эта строчка в переводи на русский звучит так:
Код: Выделить всё
Если LogStart вернул "true", то выйти из функции вернув 1
что-то мне подсказывает что ты хотела написать немного по другому.
Код: Выделить всё
Если LogStart вернул "false", то выйти из функции вернув 1
едит:
а вообще у меня к этой функции перетензия есть еще
я забыл пока писал остальное.
Код: Выделить всё
bool LogStart()
{
LogFile = fopen("log.txt", "w");
if (!LogFile) return(0);
return(LogFile);
};
по сути if (!LogFile) return(0); звучит примерно так "Если указатель на LogFile равен нулю то вернуть ноль".
но если посмотреть на функцию повнимательнее то видно что даже если LogFile не равен нулю мы все равно возвращает что что в LogFile (return (LogFile)) так может проще для чтения будет
Код: Выделить всё
bool LogStart()
{
LogFile = fopen("log.txt", "w");
return(LogFile);
};
Если ноль так все равно ноль, если не ноль все равно не ноль.
а вообще как по мне то правельнее так
но это только мое мнение пиши как считаешь нужным никого не слушай
(ну слушай только то что помогает сделать твой код рабочим, а то что я сейчас пишу делает твой код "красивым на мой взгляд")
Код: Выделить всё
bool LogStart()
{
LogFile = fopen("log.txt", "w");
if (!LogFile) return false;
return true;
};
ну с Экстерном могу тебе посоветовать делать как я
я в каждом проекте создаю 2 файла Extern.h и Define.h и в каждый хеадер инклудю Extern.h. файл такого вида обычно.
Код: Выделить всё
#ifndef ExternH
#define ExternH
#include "Define.h"
#include <windows.h>
extern HDC hDC;
extern HWND hWnd;
extern HINSTANCE hInstance;
extern HGLRC hRC;
extern ULONG QuitValue;
extern bool Working;
extern bool Active;
#endif
здесь переписаны глобальные переменные которые должны быть видны во всем проекте а создаются эти переменные уже в каком-нить из .cpp
далее
продолжим разюирать твой код.
Код: Выделить всё
void Log(char* LogString)
{
fwrite(LogString, sizeof(*LogString), 80, LogFile);
fwrite("\n",1,1,LogFile);
};
fwrite пишет "sizeof(*LogString) * 80" байт, но строка может же быть и меньше, а что если мы залезем в "чужую" память? может все-же подгрузить string.h и написать.
Код: Выделить всё
void Log(char* LogString)
{
fwrite(LogString, sizeof(*LogString), strlen(LogString), LogFile);
fwrite("\n",1,1,LogFile);
};
а то такой код
Код: Выделить всё
int main(int, char* [])
{
if (!LogStart())return(1);
TEObject *a = new (TEClass);
a->Log("test");
delete a;
LogDone();
return 0;
}
привел к тому что в файл попало что-то типа "test cxvl dskfxo dskfjhv dxkvc"
далее
Код: Выделить всё
void TEClass::Log(char* LogString)
{
Log(LogString);
};
когда ты внутри класса вызываешь функцию одноименную с функцией класса компилятор вызовет функцию класса т.е. в данном коде функция вызывает сама себя
потом снова сама себя... = бесконечное вложение.
Что-бы вызвать функцию вне класса пиши
Код: Выделить всё
void TEClass::Log(char* LogString)
{
::Log(LogString);
};
а лучше конечно не допускать одинаковых имен, запутаешься... но с другой стороны, т.к. эти функции у тебя "базовые" почему бы их не засунуть в базовый класс TEObject как виртуальные и если нужно будет переделывать их в дочерних классах.
ну вроде все что бросилось в глаза
если есть еще вопросы пиши будем форумом обсуждать и подсказывать.