C ++:标题问题

时间:2012-02-07 00:38:18

标签: c++ class header-files

我只是无法赢得标题。

我有一个类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_ */

然后,在Log.cpp和Main.cpp中,includes只是#include "Log.h"

4 个答案:

答案 0 :(得分:3)

你是否包括了包含警卫?

Log.h

#ifndef LOG_H
#define LOG_H

// your code here

#endif

答案 1 :(得分:2)

听起来你可能没有包括警卫?尝试添加到头文件的顶部:

    #ifndef LOG_HEADER_FILE
    #define LOG_HEADER_FILE

然后在头文件的底部:

    #endif

答案 2 :(得分:0)

该问题最终成为包含在内的顺序。有些包括在其他包括之前必须包括在内以避免重新定义问题。

答案 3 :(得分:-1)

这是相当模糊的,但很可能你需要在标题中包含一些防守。如果您使用的是MSVC,那么顶部应该#pragma once。如果没有,标准如:

 #ifndef LOG_H_ 
 #define LOG_H_

 ///Rest of header file


 #endif