Привет, форумчане. Решил тут наскоком немного объектно попрограммировать и столкнулся с непонятной проблемой линкера созал класс типа Singleton MyLogger.cpp для логгирования ошибок через все приложение(даю упрощенный вариант): Код (Text): MyLogger.cpp #include "StdAfx.h" #include "MyLogger.h" MyLogger::MyLogger(void) { } MyLogger::~MyLogger(void) { } MyLogger * MyLogger::instance(void) { m_file = fopen("myfile.log","a"); return NULL; } MyLogger.h #pragma once class MyLogger { public: MyLogger(void); public: ~MyLogger(void); public: static MyLogger * instance(void); static FILE* m_file; }; При линковке возникает такая проблема: Код (Text): Error 10 error LNK2019: unresolved external symbol "public: static struct _iobuf * MyLogger::m_file" (?m_file@MyLogger@@2PAU_iobuf@@A) referenced in function "public: static class MyLogger * __cdecl MyLogger::instance(void)" (?instance@MyLogger@@SAPAV1@XZ) MyLogger.obj Похоже линкер не видит этот объект, непонятно почему.
Статические поля надо явно инициализировать вне объявления класса и вне функций. Фактически, аналогично объявлению/инициализации глобальных переменных: Код (Text): FILE* MyLogger::m_file=NULL;
neutronion Ага, это государственная тайна. http://www.google.ru/search?q=не+линкуются+статические+члены