-1

質問が不完全な場合、私はプログラマーではありません。文脈から外れている場合は、適切なリンクに移動してください...

「file.h」というヘッダーファイルがあり、その中にいくつかの関数が宣言されている場合。「file.c」で定義を与えることとは別に、ヘッダーファイルがfile.h(対応するすべての関数を含む)のままになるように、さまざまな関数にさまざまな.cファイルを使用できるようにする方法はあります。私はコードブロックを使用しています。

助けていただければ幸いです。

4

5 に答える 5

3

注意:回答のこの部分は、OPが質問から削除したソースコードを参照しています...

getNode単一のint引数を取り、へのポインターを返すと宣言しますnode。それでもgetNode、引数を取らず、へのポインターを返すように定義しますnode

宣言または定義を改善する必要があり、の使用法を考えると、getNode定義を改善します。

node* getNode(int data)
{
    node* temp=new node;
    temp->data = data; // <- use the argument
    temp->left=NULL;
    temp->right==NULL;
    temp->next==NULL;
    return temp;
}

新しい質問に関しては、プリプロセッサのおかげで、ヘッダー ファイルはソース インクルードの単なるチャンクです。

慣例により、これを使用してグローバル変数、関数、およびデータ構造を宣言できます。ただし、これらの宣言が意味をなしており、アプリケーションの残りの部分と同期していることを確認する必要があります。

于 2012-05-09T13:50:07.517 に答える
1

あなたの最初の質問については、はい、できます、ここにそれについて話している記事があります。

タイトルのヘッダーファイルがあり、別のライブラリに含まれる関数と別のライブラリheader.hに含まれる関数をインクルードしたい場合は、header.hfunction.cで次の手順を実行するだけです 。

#include "header.c"
#include <other.h>

ここで、other.hは他の関数を含む機能ヘッダーファイルです。


注意:回答のこの部分は、OPが削除した質問のセクションを参照しています。

次の質問では、の関数宣言がgetNode実装方法と一致していないようです。(void関数として作成されますが、整数パラメーターを使用して呼び出しています)。あなたの問題を解決するために、私はそれを整理することから始めます。

于 2012-05-09T13:54:32.207 に答える
1

treelib.h で定義されている getNode の定義には、引数があります。treelib.cpp の getNode の実装はそうではありません。したがって、treelib.h では「node* getNode(int);」と定義されています。しかし、treelib.cpp では、「node* getNode()」として実装しています。2つは同じではありません。ヘッダーの定義と一致するように treenode.cpp のバージョンを変更すれば問題ありません。

于 2012-05-09T13:53:01.883 に答える
1

ヘッダー ファイルは通常、構造体/クラス、定数、関数プロトタイプなどを宣言するために使用されます。しかし、ヘッダー ファイルとソース ファイルの間には、それらに与える意味以外の関係はありません。「ソースファイルごとに1つのヘッダーファイル」などはありません。

必要に応じてコードを分割できます。file.h必ずしもfile.cppどこかにファイルが必要であることを意味するわけではありません。それはただの慣習です。

あなたの問題に関しては、関数を間違って実装しただけです (ソース ファイルにパラメーターがありません)。

于 2012-05-09T13:53:12.427 に答える
0

Q1:はい、関数ごとに異なる実装ファイルを使用して、それらをリンクするだけです。

実際、これはコードを個別のコンパイル単位に分割するための良い方法です。関連するコードを見つけやすくするだけでなく、一部の関数が参照されない場合は実行可能ファイルのサイズを小さくすることもできます。

Q2:関数を定義していませんgetNode(int)が、getNode( )

于 2012-05-09T13:50:42.150 に答える