C++:标题问题

C++: Header issues

本文关键字:问题 标题 C++      更新时间:2023-10-16

我只是似乎无法用标题赢得

我有一个类Log,它有一个定义类Log的头Log.h,然后Log.cpp实现了Log的方法。我需要它在Main.cpp中可用,所以我将Log.h包含在Main.cp中,我收到了臭名昭著的"已定义"错误。

如果我从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中的include仅为#include "Log.h"

您是否包含include guard?

日志.h

#ifndef LOG_H
#define LOG_H
// your code here
#endif

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

    #ifndef LOG_HEADER_FILE
    #define LOG_HEADER_FILE

然后在头文件的底部:

    #endif

问题最终是包含的顺序。为了避免重新定义问题,必须先包含一些include,然后再包含其他include。

这是相当模糊的,但很可能您需要在标头中包含一些保护。如果你使用的是MSVC,顶部的#pragma once就可以了。如果不是,可以使用标准的东西,比如:

 #ifndef LOG_H_ 
 #define LOG_H_
 ///Rest of header file

 #endif