【问题标题】:Trying to study shine MPEG Layer-III encoder - getting "redeclaration of C++ built-in type 'bool'"尝试研究闪耀 MPEG Layer-III 编码器 - 获得“重新声明 C++ 内置类型'bool'”
【发布时间】:2010-10-18 13:45:16
【问题描述】:

您好。

我正在研究 mpeg layer-III 编码为即将到来的项目工作的方式。我下载了 Shine 编码器,据说它是最简单的。 http://www.mp3-tech.org/programmer/sources/shine.zip 是链接。

我在独立项目中成功编译了它们,但我需要在 QT 项目中使用它们。

我在 QT 中创建了新的空白控制台项目 并将之前为我成功编译的所有文件添加为现有文件(来自 Shine.zip 的文件)。

这是我的 main.cpp:

#include <QtCore/QCoreApplication>
#include "main.h"
int main(int argc, char *argv[])
{
//    QCoreApplication a(argc, argv);
//    return a.exec();
    mainc(argc,argv);
}

这是 main.h:

#ifndef MAIN_H
#define MAIN_H
#include "main.c"
#endif // MAIN_H

其他所有内容都保持不变(我的意思是,如果没有这两个文件,它会成功编译并工作)

我现在在这部分遇到错误

#ifndef bool
typedef unsigned char bool;   <--- "redeclaration of C++ built-in type 'bool'"
#endif

之前这里没有错误。据我了解,一个 cpp 文件的存在使所有代码都编译为 c++ 并且闪耀代码是 c,而不是 c++...这是否意味着我不能在使用 QT 类 QCoreApplication 的项目中使用 c 代码?

【问题讨论】:

    标签: c++ c qt qt-creator mpeg


    【解决方案1】:

    您可以在同一个项目中混合使用 C 和 C++ 代码,但您需要使用 C 编译器编译 C 代码。例如,不要尝试从 C++ 文件中包含 main.c,而是单独编译 C 代码,并将需要从 C++ 调用的任何 C 函数声明为 extern "C",例如

    extern "C" int mainc(int argc, char *argv[]);
    

    【讨论】:

    • 谢谢!好的,我明白了,所以,我应该做的是制作一个包含在 main.cpp 文件中的头文件,这个头文件应该做这个声明,然后与这个头文件同名的文件 .c 应该包含实现,对?我的意思是,现在它对我有用,但我不能确定我做对了......
    【解决方案2】:

    永远不要在头文件中包含实现文件。

    #include "main.c"
    

    错了。如果#ifdef MAIN_H 不保护,它将导致包含递归。

    在您的示例中,QCoreAppplication 包含两次导致错误消息。

    【讨论】:

    • 谢谢,我现在已经阅读了有关头文件的内容,我知道我错了。所以,如果我做对了,当我包含一个 .h 文件时,编译器会自动在同名的 .c 或 .cpp 文件中查找代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多