Попытка изучить блеск MPEG Layer-III кодировщик - получение "переобъявления C ++ встроенного типа 'bool'" - PullRequest
0 голосов
/ 18 октября 2010

Привет.

Я изучаю, как работает кодирование mpeg layer-III для будущего проекта. Я загрузил кодировщик блеска, поскольку это, как говорят, самый простой из всех. 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 ++ ... Означает ли это, что я не могу использовать код c в проекте, который использует классы QT QCoreApplication?

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Вы можете смешивать код C и C ++ в одном проекте, но вам нужно скомпилировать код C с помощью компилятора C.Вместо того, чтобы пытаться включить main.c из файла C ++, скомпилируйте код C отдельно и объявите все функции C, которые вам нужно вызывать из C ++, как extern "C", например

extern "C" int mainc(int argc, char *argv[]);
0 голосов
/ 18 октября 2010

Никогда не включайте файл реализации в заголовочный файл.

#include "main.c"

неправильно. Это может привести к включенной рекурсии, если #ifdef MAIN_H не защитит.

В вашем примере QCoreAppplication включено дважды, что приводит к сообщению об ошибке.

...