Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Access violation writing location error.

Ostatnio zmodyfikowano 2015-07-06 20:46
Autor Wiadomość
nano-stalker
Temat założony przez niniejszego użytkownika
Access violation writing location error.
» 2015-07-05 21:53:30
Witam. Piszę własną pomocniczą bibliotekę do tworzenia logów itp.
i napotkałem kilka problemów mimo że niedawno to wszystko działało...
Access violation writing location, właśnie taki błąd wyskakuje w okienku, mimo że kod kilka minut wcześniej działał.
Przepraszam za tak żenujący opis problemu, ale nie wiem jak go opisać.
"active CXX0030: Error: expression cannot be evaluated" takie coś mam w tym podglądzie (add watch) co to oznacza?
Proszę oto kod, jest dość długi i zdaje się że mało zrozumiały... Aha i błąd występuje na końcu pliku Log.cpp.

main.cpp
C/C++
#include "Logger.h"
#include "Loader.h"
#include <iostream>

using namespace ml;
using std::cin;

void main()
{
    std::cout << "Hello world!\n";
   
    Loader load;
   
    cout << "\nDodawanie adresu";
   
    if( load.adres( "C:/Info.log" ) ) // z jakiego pliku ma czytać
         cout << "\nOtworzono!";
   
    cout << "\nPrzypisywanie...";
   
    load.debugMode( "C:/DebugMode.log" );
    load.setBreaker( '"' );
   
    cout << "\n\nMa na imię: " << load.strLoad( "name=" ) << endl;
    cout << "Lubi: " << load.strLoad( "like=" ) << endl;
    cout << "Ma lat: " << load.intLoad( "lat=" ) << endl;
    cout << "Nazwisko: " << load.strLoad( "nazwisko=" ) << endl;
   
    cin.get();
   
}

Log.h
C/C++
// Dyrektywy:

#pragma once

#include <string>
#include <fstream>

// Ustawienie przestrzeni nazw:

using std::string;
using std::fstream;

namespace ml // ustawienie przestrzeni nazw ml:: MicroLibrary
{
   
    ///////////////////////\\\\\\\\\////////////////////////////
    /////////////////////////\  LOG  \//////////////////////////
    ///////////////////////////\\\\\\\\\////////////////////////
   
    class Log
    {
    public:
        Log( void ); // konstruktor Logu
        ~Log( void ); // destruktor Logu
       
    private:
        ///////////////////////////////////  // addNote("Hehe"); - [niższy poziom] dodoaje wpis do logu "logfile"
        void addNote( char );
        void addNote( string );
        void addNote( int );
        void addNote( float );
        void addNote( double );
       
        bool openFromPath( string ); // openFromPath("C:/Mylog.log"); - [niższy poziom] otwórz (lub utwórz) log ze ścieżki
       
        bool isReady(); // sprawdza czy objekt jest gotowy do pracy: true - tak, false - nie
       
        void activateLogging( bool ); // włącza lub wyłącza dodawanie wpisów do logu
       
        fstream logfile; // plik do którego dodowane są kolejne wpisy
        string path; // ścieżka do pliku, podana wcześniej
       
        friend class Logger; // zaprzyjaźnienie klasy Logger
       
        bool endlInfo; // inforamcja o automatycznym wstawianu końca linii
        bool numerationOn; // informacja o automatycznej numeracji
        int numerationInfo; // informacja na której linii zakończył
        bool active; // informacja, czy dodawanie wpisów jest aktywne
       
    };
   
} // koniec namespace micro

Log.cpp
C/C++
#include "Log.h"

using namespace ml;

Log::Log() // konstruktor log
{
    endlInfo = true;
    active = true;
    numerationOn = false;
    numerationInfo = 0;
}

Log::~Log() // destruktor log
{
}

void Log::addNote( char text ) // addNote dodaj do logu
{
    if( active )
    if( isReady() ) // jest prawdą
         logfile << text;
    else
    if( openFromPath( path ) )
    if( isReady() )
         logfile << text;
   
}

void Log::addNote( string text ) // -||-
{
    // if( active )
    if( isReady() ) // jest prawdą
         logfile << text;
    else
    if( openFromPath( path ) )
    if( isReady() )
         logfile << text;
   
}

void Log::addNote( int liczba ) // -||-
{
    if( active )
    if( isReady() ) // jest prawdą
         logfile << liczba;
    else
    if( openFromPath( path ) )
    if( isReady() )
         logfile << liczba;
   
}

void Log::addNote( float liczba ) // -||-
{
    if( active )
    if( isReady() ) // jest prawdą
         logfile << liczba;
    else
    if( openFromPath( path ) )
    if( isReady() )
         logfile << liczba;
   
}

void Log::addNote( double liczba ) // -||-
{
    if( active )
    if( isReady() ) // jest prawdą
         logfile << liczba;
    else
    if( openFromPath( path ) )
    if( isReady() )
         logfile << liczba;
   
}

bool Log::openFromPath( string path ) // otwórz ze ścieżki, kernel logu zawiera w sobie otwarty plik, mozna go //edytować ten plik (linker)
{
    logfile.open( path, std::ios::out ); // otwiera logfile klasy LOG
   
    if( logfile.bad() ) // obsługa błędów
         return false;
    else
         return true;
   
}

bool Log::isReady() // sprawdza czy plik jest już otwarty i czy wsszystko jest gotowe do działania
{
    if( logfile.is_open() )
         return true;
    else
         return false;
   
}

void Log::activateLogging( bool yesNo )
{
    active = yesNo;
}

Logger.h
C/C++
// Dyrektywy:
#pragma once

#include "MicroLib.h"
#include "Log.h"

namespace ml // przestrzeń nazw ml:: MicroLibrary
{
   
    class Logger
    {
    public:
        Logger( void ); // konstruktor Loggera
        ~Logger( void ); // destruktor Loggera
       
        void addKernel( Log & kernel ); // dodaje objekt klasy Log, na którym później pracuje (MUSI otrzymać orginalny objekt!)
        bool addPath( string sciezka_do_pliku ); // dodaje ścieżkę do pliku logu (lub tworzy go na nowo)
        void openKernel( Log * kernel ); // dodaje objekt klasy Log, na którym później pracuje (MUSI otrzymać wskaźnik do objektu!)
        Log * issueLog();
        Log & adrssueLog();
       
        ///////////////////////////////////  // metoda add("Cześć") służąca do dodawania nowego wpisu, przeciążona argumentami
       
        void add( string );
        void add( string, int );
        void add( int, string );
        void add( int );
        void add( string, int, string );
        void add( int, string, int );
       
        void add( float );
        void add( string, float );
        void add( float, string );
        void add( float, string, float );
        void add( string, float, string );
       
        void add( double );
        void add( string, double );
        void add( double, string );
        void add( double, string, double );
        void add( string, double, string );
       
        ///////////////////////////////////  // metoda addHead( "=", 10 [opcjonalnie], 2 [opcjonalnie] )
        // argumenty: 1 - rysowany znak, 2 - liczba powtórzeń, 3 - liczba linii
        void addHead( string znak );
        void addHead( string znak, int liczba_powtorzen );
        void addHead( string znak, int liczba_powtorzen, int liczba_linii );
       
        void prefix( string );
        void prefixOn( bool );
       
        void suffix( string );
        void suffixOn( bool );
       
        void numerationOn( bool ); // ustawia automatyczną numerację każdej linii
       
        void endlOn( bool ); // ustawia automatyczne wstawianie końca linii po dodaniu wpisu: true - tak, false - nie
       
        void logActive( bool );
       
       
    protected:
        Log * log; // wskaźnik na objekt Logu
       
        bool endlineOnInfo; // czy koniec linii jest włączony
        bool numerationOnInfo; // czy numerowanie linii jest włączone
        bool prefixOnInfo; // czy dodawanie prefixu jest włączone
        bool suffixOnInfo; // czy dodawanie suffixu jest włączone
        bool kernelHasLoaded; // używane do sprawdzenia czy kernel jest załadowany
       
        string prefixUsed; // używany prefix
        string suffixUsed; // używany suffix
       
    private:
        void addNumeration(); //
        void addPrefix(); //  prywatne dodatkowe metody
        void addSuffix(); //  dodające "coś" do logu
        void addEndl(); //
       
    };
   
} // koniec przestrzeni nazw ml

Loader.h
C/C++
#include "Logger.h"
#include <string>
#include <fstream>

using namespace std;

namespace ml
{
    const string BUG_NOTFIND = "<[BUG_OF_LOAD_NOTFIND]>";
   
    class Loader
    {
       
       
    public:
        Loader();
        ~Loader();
       
        bool adres( string );
        bool adres( ifstream & );
       
        string strLoad( string );
        int intLoad( string );
        long lngLoad( string );
        double dubLoad( string );
       
        void setBreaker( char );
       
        void debugMode( string );
        void debugMode( Log & );
       
    protected:
       
        ifstream * file;
        string * bufor;
        char breaker;
       
    private:
        Logger log;
        string fileAdres;
       
    };
   
}

Loader.cpp
C/C++
#include "Loader.h"

////////////////////////////////////////////////////////////
////////////////////////// LOADER //////////////////////////
////////////////////////////////////////////////////////////

using namespace ml;

Loader::Loader()
{
    fileAdres.clear();
    file = NULL;
    file = new ifstream;
   
    log.logActive( false );
    log.prefix( "[_MicroLib::LoaderDebugger_]" );
}

Loader::~Loader()
{
}

bool Loader::adres( string adres )
{
    file->open( adres );
    if( file->is_open() )
    {
        fileAdres = adres;
        return true;
    }
    else return false;
   
}

bool Loader::adres( ifstream & file )
{
    if( file.is_open() )
    {
        this->file = & file;
        return true;
    }
    else return false;
   
}

string Loader::strLoad( string findThis )
{
    log.add( "\n\n\nRozpoczynam poszukiwanie: " + findThis );
    log.add( "Wczytuję plik..." );
   
    string * buf;
    buf = new string;
   
    findThis += breaker;
   
    if( file->is_open() )
    {
        file->seekg( 0 );
        while( !file->eof() )
        {
            log.add( "Pobieram dane..." );
           
            getline( * file, * buf );
            if( * buf == "" && file->eof() )
            {
                log.add( BUG_NOTFIND );
                return BUG_NOTFIND;
            }
           
            if( !buf->find( findThis ) )
            {
                log.add( "Znalezłem w linii: " + * buf );
                break;
            }
           
            else if( file->eof() )
            {
                log.add( BUG_NOTFIND );
                return BUG_NOTFIND;
            }
        }
    }
   
    string out;
   
    log.add( "Rozpoczynam obróbkę..." );
   
    out.insert( 0, * buf, findThis.size(), buf->size() - findThis.size() - 1 );
   
    log.add( "Wyjście [STR]: " + out );
   
    delete buf;
   
    return out;
} // end.

int Loader::intLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [INT]: ", atoi( tmp->c_str() ) );
        return atoi( tmp->c_str() );
    }
}

double Loader::dubLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [DOUBLE]: ", atof( tmp->c_str() ) );
        return atof( tmp->c_str() );
    }
}

long Loader::lngLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [LONG]: ", atol( tmp->c_str() ) );
        return atol( tmp->c_str() );
    }
}

void Loader::setBreaker( char breaker )
{
    this->breaker = breaker;
}

void Loader::debugMode( string path )
{
    Log logKernel;
    log.addKernel( logKernel );
    if( log.addPath( path ) );
   
    log.logActive( true );
}

void Loader::debugMode( Log & logKernel )
{
    log.openKernel( & logKernel );
    log.logActive( true );
}
Program przestał działać gdy zacząłem pisać activateLogging( bool ); dodałem if( active ) w addNote(...).
Chodzi o to żeby doprowadzić ten kod do stanu żeby nie wyrzucał tego wyjątku... Wszystkie pliki są zapisywane na C:/ Można to zmienić. Za wszelkie odpowiedzi z Waszej strony dziękuję. PS. jak używać wyszukiwarki w Waszym serwisie?
P-134356
pekfos
» 2015-07-05 22:03:35
Ten kod jest pełen niepotrzebnych alokacji, wycieków pamięci i powtarzającego się kodu. Gdzie Logger.cpp?

Aha i błąd występuje na końcu pliku Log.cpp.
Czyli gdzie..?

PS. jak używać wyszukiwarki w Waszym serwisie?
Upoważniam do skorzystania z Google. W naszym serwisie nie ma wyszukiwarki ;)

C/C++
void Loader::debugMode( string path )
{
    Log logKernel;
    log.addKernel( logKernel );
    if( log.addPath( path ) );
   
    log.logActive( true );
}
Zapisujesz adres zmiennej lokalnej i używasz jej, po jej zniszczeniu.
P-134357
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-07-05 22:10:26
Przepraszam oto Logger.cpp
C/C++
#pragma once

#include "Logger.h"
using namespace ml;

Logger::Logger() // konstruktor Loggera
{
    log = NULL;
   
    endlineOnInfo = false;
    numerationOnInfo = false;
    prefixOnInfo = false;
    suffixOnInfo = false;
   
    prefixUsed = "";
    suffixUsed = "";
}

Logger::~Logger() // destruktor loggera
{
}

void Logger::addKernel( Log & kernel ) // ustawia objekt klasy Log ( z ADRESU ) na którym póżniej będzie pracował
{
    log = & kernel;
    endlineOnInfo = log->endlInfo;
    numerationOnInfo = log->numerationOn;
}

void Logger::openKernel( Log * kernel ) // ustawia objekt klasy Log ( z WSKAŹNIKA ) na którym póżniej będzie pracował
{
    log = kernel;
    endlineOnInfo = log->endlInfo;
    numerationOnInfo = log->numerationOn;
}

Log * Logger::issueLog()
{
    return log;
}

bool Logger::addPath( string path ) // ustawia ścieżkę do pliku logu, nie może być ustawione przed "addKernel(...)"
{
    if( !log->openFromPath( path ) )
         return false;
    else return true;
   
}

//////////////////////////////////// // metody dodoawania wpisu do logu, przeciążone argumentami

void Logger::add( string text )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text );
   
    addEndl();
}

void Logger::add( string text, int liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text );
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( int liczba, string text )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
    log->addNote( text );
   
    addEndl();
}

void Logger::add( int liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( string text1, int liczba, string text2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text1 );
    log->addNote( liczba );
    log->addNote( text2 );
   
    addEndl();
}

void Logger::add( int liczba1, string text, int liczba2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba1 );
    log->addNote( text );
    log->addNote( liczba2 );
   
    addEndl();
}

void Logger::add( float liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( string text, float liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text );
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( float liczba, string text )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
    log->addNote( text );
   
    addEndl();
}

void Logger::add( float liczba1, string text, float liczba2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba1 );
    log->addNote( text );
    log->addNote( liczba2 );
   
    addEndl();
}

void Logger::add( string text1, float liczba, string text2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text1 );
    log->addNote( liczba );
    log->addNote( text2 );
   
    addEndl();
}

void Logger::add( double liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( string text, double liczba )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text );
    log->addNote( liczba );
   
    addEndl();
}

void Logger::add( double liczba, string text )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba );
    log->addNote( text );
   
    addEndl();
}

void Logger::add( double liczba1, string text, double liczba2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( liczba1 );
    log->addNote( text );
    log->addNote( liczba2 );
   
    addEndl();
}

void Logger::add( string text1, double liczba, string text2 )
{
    addNumeration();
    addPrefix();
   
    log->addNote( text1 );
    log->addNote( liczba );
    log->addNote( text2 );
   
    addEndl();
}

//////////////////////////////////// // metody dodoawania nagłówków do logu, przeciążone

void Logger::addHead( string znak )
{
    for( int i = 0; i <= 20; i++ )
         log->addNote( znak );
   
    addEndl();
}

void Logger::addHead( string znak, int liczba_powtorzen )
{
    for( int i = 0; i <= liczba_powtorzen; i++ )
         log->addNote( znak );
   
    addEndl();
}

void Logger::addHead( string znak, int liczba_powtorzen, int liczba_linii )
{
    for( int a = 0; a <= liczba_linii; a++ )
    {
        for( int i = 0; i <= liczba_powtorzen; i++ )
             log->addNote( znak );
       
        log->addNote( "\n" );
    }
   
    addEndl();
}

//////////////////////////////////// // Numeracja, Prefix'y, Suffix'y, Endline'y i ich aktywacje

void Logger::addNumeration()
{
    if( numerationOnInfo == true )
    {
        log->addNote( log->numerationInfo );
        log->addNote( ". " );
        log->numerationInfo += 1;
    }
}

void Logger::addPrefix()
{
    if( prefixOnInfo == true )
         log->addNote( prefixUsed );
   
}

void Logger::addSuffix()
{
    if( suffixOnInfo == true )
         log->addNote( suffixUsed );
   
}

void Logger::addEndl()
{
    if( endlineOnInfo == true )
         log->addNote( "\n" );
   
}

void Logger::numerationOn( bool on )
{
    if( on == true )
    {
        log->numerationOn = true;
        numerationOnInfo = true;
    }
    else if( on == false )
    {
        log->numerationOn = false;
        numerationOnInfo = false;
    }
    else
         add( "Error: błąd w ustawieniu w metody numeracji [OnTheCode]" );
   
}

void Logger::prefixOn( bool on )
{
    if( on == true )
         prefixOnInfo = true;
    else if( on == false )
         prefixOnInfo = false;
    else
         add( "Error: błąd w ustawieniu metody prefix'u [OnTheCode]" );
   
}

void Logger::suffixOn( bool on )
{
    if( on == true )
         suffixOnInfo = true;
    else if( on == false )
         suffixOnInfo = false;
    else
         add( "Error: błąd w ustawieniu metody suffix'u [OnTheCode]" );
   
}

void Logger::endlOn( bool on )
{
    if( on == true )
         endlineOnInfo = true;
    else if( on == false )
         endlineOnInfo = false;
    else
         add( "Error: błąd w ustawieniu metody końca linii (endl) [OnTheCode]" );
   
}

void Logger::prefix( string prefix )
{
    prefixUsed = prefix;
    prefixOnInfo = true;
   
}

void Logger::suffix( string suffix )
{
    prefixUsed = suffix;
    suffixOnInfo = true;
}

void Logger::logActive( bool yesNo )
{
    log->activateLogging( yesNo );
}
Właśnie coś patrzę że ta wyszukiwarka nie chce ze mną współpracować :)
Błąd moim zdaniem znajduję się w
C/C++
void Logger::logActive( bool yesNo )
{
    log->activateLogging( yesNo );
}
Dzięki. Kod będę musiał jeszcze dopracować...
P-134358
pekfos
» 2015-07-05 22:18:47
Błąd moim zdaniem znajduję się w
Napisałem, gdzie jest błąd.
P-134359
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-07-05 22:30:47
Kodu jeszcze nie poprawiłem, ale tak masz rację. Dziękuję :) nawet nie skompilowałeś... wkleić potem tu poprawiony kod?
P-134361
pekfos
» 2015-07-05 23:00:15
Wklej rozwiązanie i zamknij temat, jeśli problem został rozwiązany ;)
P-134362
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-07-06 20:46:06
A oto poprawione pliki :)

Loader.h
C/C++
#include "Logger.h"
#include <string>
#include <fstream>

using namespace std;

namespace ml
{
    const string BUG_NOTFIND = "<[BUG_OF_LOAD_NOTFIND]>";
   
    class Loader
    {
       
       
    public:
        Loader();
        ~Loader();
       
        bool adres( string );
        bool adres( ifstream & );
       
        string strLoad( string );
        int intLoad( string );
        long lngLoad( string );
        double dubLoad( string );
       
        void setBreaker( char );
       
        void debugMode( string );
        void debugMode( Log & );
       
    protected:
       
        ifstream * file;
        string * bufor;
        char breaker;
       
    private:
        Log * logKernel;
        Logger log;
        string fileAdres;
       
    };
   
}

Loader.cpp
C/C++
#include "Loader.h"

////////////////////////////////////////////////////////////
////////////////////////// LOADER //////////////////////////
////////////////////////////////////////////////////////////

using namespace ml;

Loader::Loader()
{
    fileAdres.clear();
    file = NULL;
    file = new ifstream;
   
}

Loader::~Loader()
{
}

bool Loader::adres( string adres )
{
    file->open( adres );
    if( file->is_open() )
    {
        fileAdres = adres;
        return true;
    }
    else return false;
   
}

bool Loader::adres( ifstream & file )
{
    if( file.is_open() )
    {
        this->file = & file;
        return true;
    }
    else return false;
   
}

string Loader::strLoad( string findThis )
{
    log.add( "\n\n\nRozpoczynam poszukiwanie: " + findThis );
    log.add( "Wczytuję plik..." );
   
    string * buf;
    buf = new string;
   
    findThis += breaker;
   
    if( file->is_open() )
    {
        file->seekg( 0 );
        while( !file->eof() )
        {
            log.add( "Pobieram dane..." );
           
            getline( * file, * buf );
            if( * buf == "" && file->eof() )
            {
                log.add( BUG_NOTFIND );
                return BUG_NOTFIND;
            }
           
            if( !buf->find( findThis ) )
            {
                log.add( "Znalezłem w linii: " + * buf );
                break;
            }
           
            else if( file->eof() )
            {
                log.add( BUG_NOTFIND );
                return BUG_NOTFIND;
            }
        }
    }
   
    string out;
   
    log.add( "Rozpoczynam obróbkę..." );
   
    out.insert( 0, * buf, findThis.size(), buf->size() - findThis.size() - 1 );
   
    log.add( "Wyjście [STR]: " + out );
   
    delete buf;
   
    return out;
} // end.

int Loader::intLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [INT]: ", atoi( tmp->c_str() ) );
        return atoi( tmp->c_str() );
    }
}

double Loader::dubLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [DOUBLE]: ", atof( tmp->c_str() ) );
        return atof( tmp->c_str() );
    }
}

long Loader::lngLoad( string findThis )
{
    string * tmp = new string;
    * tmp = strLoad( findThis );
   
    log.add( "Kończenie..." );
   
    if( * tmp == BUG_NOTFIND )
    {
        delete tmp;
        return NULL;
    }
    else
    {
        log.add( "Wyjście [LONG]: ", atol( tmp->c_str() ) );
        return atol( tmp->c_str() );
    }
}

void Loader::setBreaker( char breaker )
{
    this->breaker = breaker;
}

void Loader::debugMode( string path )
{
    logKernel = new Log;
    log.openKernel( logKernel );
    log.prefix( "[_MicroLib::LoaderDebugger_]" );
    if( log.addPath( path ) )
         log.logActive( true );
   
}

void Loader::debugMode( Log & logKernel )
{
    this->logKernel = & logKernel;
    log.openKernel( this->logKernel );
    log.logActive( true );
}
A rozwiązaniem tak jak wyżej napisał pekfos jest:
C/C++
void Loader::debugMode( string path )
{
    logKernel = new Log; // logKernel to wskaźnik w pliku Loader.h
    //gdybym tego nie dodał nadal byłby ten sam błąd
    log.openKernel( logKernel );
    log.prefix( "[_MicroLib::LoaderDebugger_]" );
    if( log.addPath( path ) )
         log.logActive( true );
   
}
A w pliku Loader.h musiałem dodać wskaźnik na obiekt Log:
C/C++
Log * logKernel;
Dzięki jeszcze raz :) jeśli ktoś chce używać (tego co tu jest nie radzę...) to niedługo umieszczę wersję z obsługą błędów i bardziej rozbudowaną na tym forum (a tak dla ludzi leniwych ;) )

P-134403
« 1 »
  Strona 1 z 1