C ++将类作为参数传递

时间:2013-09-07 10:13:11

标签: c++ class arguments

我有以下头文件:

app.h

#include "log.h"

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

我得到的错误是'CLog':'class'Type redefinition

有人可以帮忙吗? 我不确定还有什么重要的提及。

谢谢。

3 个答案:

答案 0 :(得分:0)

听起来你有一个包含问题,也许你包括log.h两次。你必须使用包含守卫。

<强> test.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

干杯。

答案 1 :(得分: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的前向声明并删除include。前瞻声明如下:

class CLog;

这样做的好处是,你有一个更大的项目,你不需要重新编译很多代码。即如果还有包含app.h的util.h但根本没有使用Clog,那么你可以避免在日志更改时重新编译它。

答案 2 :(得分:0)

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

#pragma once

解决了这个问题。