我有以下头文件:
应用程序.h
#include "log.h"
void CreateAudio(udtPhrase &uPhrase,CLog *uLog);
我得到的错误是 'CLog': 'class' 类型重新定义
任何人都可以帮忙吗?我不确定还有什么值得提及的。
谢谢你。
听起来你有一个包含问题,也许你包含log.h
了两次。您必须使用包含防护。
测试.h
#ifndef TEST_H
#define TEST_H
struct foo {
int member;
};
#endif /* TEST_H */
现在,如果您将其包含test.h
两次,struct foo
则将定义一次,因为TEST_H
已经定义了。
更新:要更深入地了解,请查看:https ://en.wikipedia.org/wiki/Include_guard
干杯。
我认为你包括 log.h 两次。您至少应该添加一些标头保护:
#ifndef some_unique_token_for_log_h
#define some_unique_token_for_log_h
definitions
#endif
这应该可以防止您的错误。如果您可以避免在 app.h 中包含 log.h,那就更好了。您可以在 app.h 中对 CLog 进行前向声明并删除包含。前向声明如下所示:
class CLog;
这里的好处是你有一个更大的项目,你不需要重新编译很多代码。即如果还有 util.h 包含 app.h 但根本不使用 Clog,那么您可以避免在日志更改时重新编译它。
我已经更改了 log.h 文件,添加
#pragma once
这解决了问题。