0

本旨:

私はダイクストラのアルゴリズムのコードを書きました。ただし、他のコードなどで (ヘッダー ファイルから) 関数を呼び出す必要があります。ただし、関数が呼び出されたときにのみ変数を保存する必要があります (したがって、関数が呼び出されると、変数は返されますが、以前の呼び出しからの変数は返されません)。そして、これらの変数を他のコード/ファイルで参照する必要があります。

変数の保存方法:

2 つのベクトルを含む構造体。

私の質問:

.h ファイルを作成して構造体を保存し、そこで変数を変更するのが最善でしょうか、それとも別のファイルの別の関数から変数を呼び出して、メモリの問題などを心配することなく使用する方法はありますか?

また...私のintメインが引数を取らない場合、このダイクストラアルゴリズムの.hファイルをどのように設定しますか?......

-編集-

typedef struct
{
 int a;
 int b;
} STR;

STR Func()
{
 STR str;

str.a = 5;
str.b = 6;
return str;
}

私のコードの基本モデル。しかし、構造を参照する必要があり、それは別の関数を持つ別のファイルの変数です。ただし、コンパイル時に「メイン」エラーへの未定義の参照が発生するため、Func() を呼び出す int main() を追加しました。提案?

-DOSを編集-

提案された修正

.h には以下を含める必要があります。

struct_name dijkstra(input variables)

.cpp には以下を含める必要があります。

#include "dijkstra.h"

typedef struct{
blah...
}struct_name;

struct_name dijkstra{
struct_name retval;

function def...
return retval;
}

main.cpp には以下が含まれている必要があります。

#include "dijkstra.h"
#include "dijkstra.cpp"

int main(){

initialize variables... blah
struct_name return_struct = dijkstra(input variables);

return 0;
}
4

1 に答える 1

0

通常、アルゴリズムが必要とするすべての入力データを入力パラメーターとして渡し、アルゴリズムが作成するすべての有用な出力データを戻り値の型として返します。いくつかの情報をまとめてバンドルする必要がある場合は、個別の C++ 構造体またはクラスを作成できます。

アルゴリズムによって内部的に使用されるデータ構造については、通常、.h ファイルではなく、.cpp ファイルでのみ宣言します。そのため、ユーザーは内部へのアクセス/可視性を持ちません (後で動作を変更したい場合に便利です)。

したがって、ヘッダー ファイルには、入力引数と出力の戻り値の型を含む関数宣言のみが含まれている必要があります。すべてのアルゴリズム コードは、.h ファイルを含む .cpp ファイルに入ります。ヘッダー ファイルは「インターフェイス」であり、cpp ファイルは「実装」であり、分離しておくようにしています。

編集:(その後の議論から有用な点を要約)

このチュートリアルでは、2 つの .cpp ファイルと 1 つの .h ファイルがどのように組み合わされるかを示します。基本的に、両方の .cpp ファイルに .h ファイルが含まれています。.h ファイルには、(関数型と構造体型の両方の) 宣言が含まれていますが、関数定義は含まれていません。

www.learncpp.com/cpp-tutorial/19-header-files/

g++ を使用しているため、以下を使用して単一の実行可能ファイルにコンパイルできます。

g++ -o 実行可能ファイル名 main.cpp dijkstra.cpp

于 2013-07-31T19:28:37.050 に答える