Не Линкуется Программа. Жалуется Что Неразрешенный Внешний Символ &quo

Тема в разделе "MS Visual C++", создана пользователем WreWolf, 23 ноя 2011.

  1. WreWolf

    WreWolf Гость

    Вот код класса
    Если убрать нафиг все static то компилируется и работает, но мне нужно поле Log::szPath глобальным, чтоб при старте программы забить туда значение и забыть о нем
    может вы подскажете косяк?

    log.h
    Код (C++):
    #include <iostream>
    #include <time.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <winsock2.h>
    #include <time.h>

    #include <Windows.h>

    using namespace std;

    class Log;

    void tolog(char *log,int level);
    void tolog(string log,int level);
    char* get_time_string(int mode24);

    log.cpp
    Код (C++):
    #include "log.h"

    class Log
    {
    static char *szPath;

    inline string replace(string text, string s, string d)
    {
    for(unsigned index=0; index=text.find(s, index), index!=std::string::npos;)
    {
    text.replace(index, s.length(), d);
    index+=d.length();
    }
    return text;
    }  

    static void tofile(char *log)
    {
    FILE * pFile;
    pFile = fopen (szPath,"a");
    if (pFile!=NULL) {
    fputs (log,pFile);
    fclose (pFile);
    }
    }


    public:


    void Init(char *path)
    {
    *szPath=*new char[255];
    *szPath=*path;
    return;
    }

    Log()
    {

    }

    ~Log()
    {

    }

    static void loggin(char *log,int level)
    {
    char *rez=new char[sizeof(log)+100];
    sprintf(rez,"%s %s\n",get_time_string(1),log);
    switch( level)
    {
    case 1:
    tofile(rez);
    break;
    case 2:
    cout<<rez;
    tofile(rez);
    break;
    case 3:
    cout<<rez;
    break;
    }
    delete rez;
    }

    };

    //levels:
    //          1-Error     //только в файл
    //          2-Verbose   //в файл и на экран
    //          3-Debug     //только на экран
    void tolog(char *log,int level)
    {
    Log logs;
    logs.loggin(log,level);
    return;
    }

    void tolog(string log,int level)
    {
    char *FileExt = new char[log.size() + 1];
    std::strcpy ( FileExt, log.c_str() );
    delete FileExt;
    Log logs;
    logs.loggin(FileExt,level);
    return;
    }

    char* get_time_string(int mode24)
    {
    static char time_str[12] = {0};  /* Stroes the time as a string */
    struct tm *now = NULL;
    int hour = 0;
    time_t time_value = 0;

    time_value = time(NULL);         /* Get time value           */
    now = localtime(&time_value);    /* Get time and date structure */
    hour = now->tm_hour;             /* Save the hour value      */

    sprintf(time_str,"%02d:%02d:%02d",hour,now->tm_min,now->tm_sec);
    return time_str;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Какие ошибки выдает и как ты инициализируешь Log::szPath ?
     
  3. WreWolf

    WreWolf Гость

    инициализурую
    Код (C++):
    Log logs;
    logs.Init("C:\\root\\");
    Проблема решилась
    не хватало

    Код (C++):
    char *Log::szLPath;
    в log.cpp
    было

    Код (C++):
    #include "log.h"
    стало

    Код (C++):
    #include "log.h"
    char *Log::szLPath;
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А зачем тебе вызывать функцию logs.Init("C:\\root\\");, если char *Log::szLPath; у тебя глобальна?
    Просто определи её и все:
    Код (C++):
    char *Log::szLPath = "C:\\root\\";
    Хотя я вообще не понимаю зачем ты ее глобальной делаешь, ты в курсе что переменная класса, объявленная как static является одной для всех классов (class Log в твоем случае).
     
  5. WreWolf

    WreWolf Гость

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

    по тому что инициализирую ил main, хотя на самом деле думаю она уже не нужна
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Это ты о чем?

    А смысла этого предложения я вообще не понял:
     
Загрузка...

Поделиться этой страницей