0

WindowsマシンからLinuxマシンにいくつかのファイルをコピーして貼り付け、conio.hヘッダーとWindows.hヘッダーでいくつかの理解できる問題が発生しましたが、それらが何に必要かを思い出せません。

それらはメイン関数にのみあるので、コメントアウトしてプログラムを再度実行しました。エラーによって必要な場所が示されるので、Linuxで同様に機能するヘッダーをグーグルで検索できます。

私が抱えている問題は、私が得るすべてのエラーが、main関数にインクルードしたヘッダーファイルにあるが、Windows.hまたはconio.hヘッダーがインクルードされていないことです。

私が持っている質問は、どのように/なぜですか:-コンパイラは各ヘッダーファイルを順番に調べ、windows.hヘッダーにアクセスして停止し、コメントアウトされたら「Chapter_7.h」ヘッダーにアクセスしてすべての問題を見つけますか?そこで。

または、main.cppのヘッダーからのコメントアウトが、私が書いたヘッダーに何らかの影響を与える可能性があります。

または(おそらくもっと可能性が高い)私が見落とした別のオプションはありますか?

答えてくれてありがとう。

4

3 に答える 3

1

これは、.hファイルが に「含まれる」方法によるものです.cpp。コンパイル中に、ヘッダー ファイル内のすべてのテキストがインクルード ファイルにコピー ペーストされ.cppます。これは、後.hのファイルが前のファイルにアクセスできることを意味します。

これはあなたのケースで起こっているように見えます.windows.h最初の includeであり、後続のヘッダーはずっとそれを使用しています.

//#include <window.h>  
//#include <conio.h>
#include "myheader.h"    // can no longer use windows.h or conio.h
#include "myheader2.h"
于 2013-01-13T11:50:33.333 に答える
1

ヘッダーの内容は、それが含まれているファイル内にコピー アンド ペーストされていると言えます。

または、main.cpp のヘッダーのコメント アウトが、私が書いたヘッダーに何らかの影響を与える可能性があります。

絶対。推定:

//header1.h
#define X 1

//header2.h
#ifdef X
int a = 0;
#else
int a = 1;
#endif

aheader1.hが の前または後に含まれている場合、定義が異なりheader2.hます。

于 2013-01-13T11:52:44.203 に答える
1

「このマシンでは使用できないヘッダーファイルを使用しています」を修正する最初のステップは、それらのファイルを削除し、コードをコンパイルして、どこが壊れているかを確認することです。ほとんどの場合、コンパイラエラーが発生するため、見つけることができるはずですそれは非常に簡単です。

conio.hはコンソール io を許可しますが、これを Linux に修正するには少し作業が必要になる場合があります。正確に何を使用しているかによって異なります。

windows.h本質的にすべての Windows API 関数と膨大な数の型宣言を提供し、それらの多くがあるため、説明するのははるかに複雑です。そのほとんどは、おそらくあなたのプログラムが [直接] 使用することはありません。

「どこにも存在しないヘッダーファイルを使用する」ことに関する一般的な問題の 1 つは、ヘッダーファイルで宣言されているいくつかの型を使用してしまうことです。たとえば、windows.hLONG、HANDLE、およびその他の膨大な数の型を宣言します。これらの型は、他の場所の構造体や関数宣言で使用されます。削除windows.hすると、あらゆる種類の問題が発生します。

私のアプローチは、常に最初の問題を最初に修正してから、再度コンパイルすることです。その理由は、コンパイラーは、何か奇妙なものが現れると、しばしば「混乱」するからです。これは、友達に家までの車の乗り方を教えて、「左側に大きな樫の木が見えたら、次の右に曲がる」と言うようなものです。ご存知のように、樫の木は枯れかけていたため伐採され、もうそこにはありません。それで、あなたの友人はかつて樫の木があった場所を運転し、道路に沿って別の樫の木の後に右折します。もちろん、あなたの友人は正しい道から何マイルも離れており、新しい指示がなければあなたの家を見つけることは決してないので、今ではすべてのその他の指示は完全に役に立たない. コンパイラがソースファイルに「驚くべき」または「欠落している」ビットを見つけた場合も、同じことが起こります。したがって、最初のエラーを修正してから、コンパイル、修正、コンパイルを繰り返すと、通常、コードがコンパイルされるポイントに到達します。場合によっては、次のような新しい関数を作成する必要があります。

int GetTimeOfDay(void)
{
    printf("%s:%d:%s: doesn't work yet, exiting...", __FILE__, __LINE__, __func__);
    exit(1);
    return 0;  // to keep compiler happy. 
}

すべてのコードのコンパイルが完了したら、コンパイルするために追加した関数を実装/置換する方法を考え始めます。

于 2013-01-13T12:02:06.467 に答える