0

我有以下头文件:

应用程序.h

#include "log.h"

void CreateAudio(udtPhrase &uPhrase,CLog *uLog);

我得到的错误是 'CLog': 'class' 类型重新定义

任何人都可以帮忙吗?我不确定还有什么值得提及的。

谢谢你。

4

3 回答 3

0

听起来你有一个包含问题,也许你包含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

干杯。

于 2013-09-07T10:23:06.960 回答
0

我认为你包括 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,那么您可以避免在日志更改时重新编译它。

于 2013-09-07T10:23:50.400 回答
0

我已经更改了 log.h 文件,添加

#pragma once

这解决了问题。

于 2013-09-07T11:13:40.617 回答