0

ご挨拶。

私は、mpegレイヤー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

他のすべては変更されていません(つまり、これら2つのファイルがないと、正常にコンパイルされて機能しました)

この部分でエラーが発生しています

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

ここでエラーが発生する前。私が理解していることから、1つのcppファイルが存在すると、すべてのコードがc ++としてコンパイルされ、shineコードはc++ではなくcになります...QTクラスQCoreApplicationを使用するプロジェクトでcコードを使用できないということですか?

4

2 に答える 2

1

同じプロジェクトでCコードとC++コードを混在させることができますが、Cコンパイラを使用してCコードをコンパイルする必要があります。たとえば、C ++ファイルからインクルードしようとするのではなくmain.c、Cコードを個別にコンパイルし、C++から呼び出す必要のあるC関数を次のように宣言します。extern "C"

extern "C" int mainc(int argc, char *argv[]);
于 2010-10-18T14:28:52.317 に答える
0

実装ファイルをヘッダーファイルに含めないでください。The

#include "main.c"

間違っている。#ifdef MAIN_H保護しない場合は、包含再帰につながります。

あなたの例QCoreAppplicationでは、エラーメッセージにつながるものが2回含まれています。

于 2010-10-18T14:12:19.733 に答える