LINUX.ORG.RU

не правильно проверяется

 ,


0

1

Всем привет!!! Имеется класс

class log
{
public:
void createLog(char *name);//создаёт лог
int elog;//переменная которая содержит информацию о существование лога если равна 1 то лог существует
void writeLog(char *name,char *text);//Записывает в лог
}
Теперь реализация функции createLog(char *name) но не вся
log::createLog(char *name)
{
log::elog=1;//говорим что лог существует
}
Теперь создаю обьект класса
log Log;
Log.createLog("log.log");
if(Log.elog == 1)
{
printf("Все ок");
}
Но почему-то сообщение «Все ок» не выводится



Последнее исправление: sergei9 (всего исправлений: 3)

#include <stdio.h>

class log{
public:
	void createLog(const char *name);//создаёт лог
	int elog;//переменная которая содержит информацию о существование лога если равна 1 то лог существует
	//void writeLog(char *name,char *text);//Записывает в лог
};

void log::createLog(const char *name){
	log::elog=1;//говорим что лог существует
}

int main(){
	log Log;
	Log.createLog("log.log");
	if(Log.elog == 1) printf("Все ок\n");
}

Все работает ес-но. Найдите 10 отличий.

AIv ★★★★★
()
Ответ на: комментарий от AIv

ну отличия есть но нащёт log::elog=1; не нашёл

sergei9
() автор топика

А вообще лютый трындец.

Имена классов лучше начинать с большой буквы.

Строки передавать хотя как const char* (или std::string или его аналоги).

После } для класса/структуры ВСЕГДА ;

Для методов и ф-й указывать тип возвращаемого значения ВСЕГДА.

КОд надо форматировать по человечески.

elog не определена (если от нее че то зависит - нужен конструктор).

вместо log::elog лучше писать this->elog (можно просто elog).

log - крайне неудачное название как для переменной, так и для класса, угадайте почему.

AIv ★★★★★
()

А с кодировкой ты не нахимичил?

Если файл записать в несистемной кодировке, могут быть выведены некоторые символы, но не эти.

Кстати, вместо log::elog=1; без потери смысла можно написать просто elog=1;

Да, ну и надеюсь, что в финальной версии своей мегаразработки ты всё же уберёшь elog в private или хотя бы в protected, а для чтения сделаешь геттер.

В остальном - УМВР.

hobbit ★★★★★
()
Ответ на: комментарий от sergei9

Да ниче страшного, Ваш код просто не собирается;-)

AIv ★★★★★
()
Ответ на: комментарий от sergei9

которая находится в классе log

static уже не модно?

x0r ★★★★★
()
Ответ на: комментарий от AIv

+1

Строки передавать хотя как const char* (или std::string или его аналоги).

Тогда уж const std::string&

:)

hobbit ★★★★★
()
Ответ на: комментарий от sergei9

А вообще говоря некорректно выкладывать пример который не собирается и спрашивать почему там че то не работает в рантайме. Все местные телепаты ушли на корпоративчик.

AIv ★★★★★
()
Ответ на: комментарий от hobbit

ты всё же уберёшь elog в private

я сначала так исделал но потом не смог изменить его значение

sergei9
() автор топика
Ответ на: комментарий от AIv

ну смотри сильно какашками не кида

#include "log.h"
#include <stdio.h>
#include <time.h>
FILE *logfile;

int log::createLog(char *name)
{
setlocale(LC_ALL,"Russian");
logfile=fopen(name,"w");
printf("Лог успешно создан");
time_t t;
tm *tk;
time(&t);
tk=localtime(&t);
fprintf(logfile,"%d.%d.%d||Лог успешно создан\n",tk->tm_year,tk->tm_mon,tk->tm_mday);
elog=1;
namelog=name;
};
void log::writeLog(char *log,char *text)
{

    time_t t;
    tm *tk;
    time(&t);
    tk=localtime(&t);
    fprintf(logfile,"\n%d.%d.%d ||%s",tk->tm_year,tk->tm_mon,tk->tm_mday,text);

}
void log::closeLog()
{
    fclose(logfile);
}

sergei9
() автор топика

2 Ошибки

Первый блок должен закончится ";"
Во втором забыли написать тип возврата...

И будет вам «ок».

DenisPA ★★
()
Ответ на: комментарий от sergei9

Фото:
http://imagebin.ca/v/15fOdeRuWOhD

log::createLog(char *name)

(Тред ниже первого комента не читал так как все работает - или версию компилятора в студию.)

DenisPA ★★
()
Последнее исправление: DenisPA (всего исправлений: 1)

И мне кажется, что за это «log::elog=1;» вас могут убить :)

DenisPA ★★
()
Ответ на: комментарий от sergei9

В чем вы пишите??? Чем компилите??? Для начала попробуйте codebloks или qtcreetor (но создавайте проэкт не Qt а с++) Это мой компилятор:

g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.1-10ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)

DenisPA ★★
()
Ответ на: комментарий от sergei9

Тогда возьмите какую-то IDE из выше мною указанных и пройдитесь пошагово отладчиком по коду. Смотрите память....

DenisPA ★★
()
Ответ на: комментарий от AIv

main нет, это библеотека но может здесь ошибка не выводится"Неизвестный мод ini файла"

#include "ini.h"
#include "log.h"
void ini::openIni(FILE *ini,char *name,int mode)
{
if(mode == 0)ini=fopen(name,"r");
if(mode == 1)ini=fopen(name,"w");
if(mode > 1)
{

log Log;
if(Log.elog == 1)Log.writeLog("kaka.log","Неизвестный мод ini файла");


}
}
int ini::getIniInteger(FILE *ini,char *string)
{
int znach=getc(ini);
return znach;

}
void ini::closeIniFile(FILE *ini)
{
    fclose(ini);
}

sergei9
() автор топика
Ответ на: Кажется вы прикалываетесь! от DenisPA

проверил на винде результат тотже похоже дело в

#include "ini.h"
#include "log.h"
void ini::openIni(FILE *ini,char *name,int mode)
{
if(mode == 0)ini=fopen(name,"r");
if(mode == 1)ini=fopen(name,"w");
if(mode > 1)
{

log Log;
if(Log.elog == 1)Log.writeLog("kaka.log","Неизвестный мод ini файла");


}
}
int ini::getIniInteger(FILE *ini,char *string)
{
int znach=getc(ini);
return znach;

}
void ini::closeIniFile(FILE *ini)
{
    fclose(ini);
}
if(Log.elog == 1)Log.writeLog("kaka.log","Неизвестный мод ini файла");
Не работает делаю я так
ini Ini;
FILE *file
ini.openIni(file,char,"ini.ini",5);
но строчка
if(Log.elog == 1)Log.writeLog("kaka.log","Неизвестный мод ini файла");
не работает и компилятор не ругается

sergei9
() автор топика

обоже

какой редкостный говнокод.

за публичные члены-данные, метод CreateЧототам вместо конструктора и передачу параметра при каждом вызове метода вместо того, чтобы просто хранить его в объекте — надо убивать.

anonymous
()
Ответ на: обоже от anonymous

не шуми! Он страуструппа почитал

sergei9

у тебя вот тут

log Log; if(Log.elog == 1)Log.writeLog(«kaka.log»,«Неизвестный мод ini файла»);

нифига не Log.elog == 1

anonymous
()
Ответ на: обоже от anonymous

зачем здесь конструктор?

sergei9
() автор топика
Ответ на: обоже от anonymous

а зачем мне запихивать методы в приват я ведь пишу движок реализованый на классах но для его использования о классах ничего знать не нужно

sergei9
() автор топика
Ответ на: комментарий от sergei9

блин. я 3 раза ВСЮ тему перечитал. Я либо слабо понимаю, что ты хочешь увидеть от своего кода, либо я вообще ничего не понимаю. Потому как даже этот код при использовании

log Log;
Log.createLog( "111.txt" );
Log.writeLog( "зачем оно тут?", "blablabla" );

работает, на сколько это вообще возможно.

ЗЫЖ ты кста на фултильте не играешь?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.