C ++: проблемы заголовка - PullRequest
       3

C ++: проблемы заголовка

0 голосов
/ 07 февраля 2012

Я просто не могу выиграть с заголовками, кажется.

У меня есть класс Log, в котором есть заголовок Log.h, который определяет класс Log, а затем Log.cpp реализует методы Log. Мне нужно, чтобы он был доступен в Main.cpp, поэтому я включаю Log.h в Main.cpp и получаю пресловутые «уже определенные» ошибки.

Если я вытащу заголовок из Main.cpp, я не смогу использовать класс. Если я удалю заголовок из Log.cpp, то Log (очевидно) не определен.

Я не могу выиграть здесь! Что мне делать?

РЕДАКТИРОВАТЬ ДА, конечно, у меня есть охранники.

#ifndef LOG_H_
#define LOG_H_

namespace vexal {

#define CCOL_RESET  "^[[0m"
#define CCOL_RED    "^[[31m"

class Log {
public:
    Log();
    virtual ~Log();
    static void genInstance();
private:
    static Log* _inst;
};

}

#endif /* LOG_H_ */

Тогда включения просто #include "Log.h" в обоих файлах Log.cpp и Main.cpp.

Ответы [ 4 ]

3 голосов
/ 07 февраля 2012

Вы включили охранников?

Log.h

#ifndef LOG_H
#define LOG_H

// your code here

#endif
2 голосов
/ 07 февраля 2012

Звучит так, будто у вас нет охранников?Попробуйте добавить в начало вашего заголовочного файла:

    #ifndef LOG_HEADER_FILE
    #define LOG_HEADER_FILE

А затем в нижней части вашего заголовочного файла:

    #endif
0 голосов
/ 13 июня 2012

В итоге проблема была в том порядке, в котором были включены включения. Некоторые включения должны быть включены раньше других, чтобы избежать проблем с переопределением.

0 голосов
/ 07 февраля 2012

Это довольно расплывчато, но, скорее всего, вам нужно включить в свой заголовок охранников.Если вы используете MSVC, подойдет #pragma once вверху.Если нет, то что-то стандартное, как:

 #ifndef LOG_H_ 
 #define LOG_H_

 ///Rest of header file


 #endif
...