我只是无法赢得标题。
我有一个类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"
。
答案 0 :(得分:3)
你是否包括了包含警卫?
#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