主要想法:
我为dijkstra的算法写了一段代码,我很花哨。但是,我需要在其他代码和东西中调用函数(来自头文件)。但是我只需要在调用函数时存储变量(因此一旦调用该函数,它将返回变量,但不会从先前的调用返回变量)。我需要引用其他代码/文件这些变量。
我如何存储变量:
包含两个向量的结构。
我的问题:
最好是创建一个.h文件来存储一个结构,只是更改那里的变量,或者有办法从另一个文件中的另一个函数调用变量并使用它而不必担心内存问题和诸如此类的东西?
另外......如果我的int main没有参数,我将如何为这个dijkstra算法设置我的.h文件?......
- 编辑 -
typedef struct
{
int a;
int b;
} STR;
STR Func()
{
STR str;
str.a = 5;
str.b = 6;
return str;
}
我的代码的基本模型。但是我需要在另一个带有另一个函数的文件中引用结构和它的变量。但是我在编译时得到未定义的'main'错误引用,所以我添加了一个调用Func()的int main()。建议?
-edit 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;
}
答案 0 :(得分:0)
通常,您会将算法所需的所有输入数据作为输入参数传递,并返回算法创建的所有有用输出数据作为返回类型。如果需要将几条信息捆绑在一起,可以创建一个单独的C ++结构或类。
对于算法内部使用的数据结构 - 通常只在.cpp文件中声明它们,而不是.h文件。因此,用户将无法获得内部的任何访问/可见性(如果您想稍后更改它的工作方式,这将非常有用)。
因此,头文件应该只有函数声明 - 带有输入参数和输出返回类型。所有算法代码都进入.cpp文件,其中包含.h文件。头文件是'interface',cpp文件是'implementation',我们试图将它们分开。
编辑:(总结后续讨论中的有用点)
本教程展示了2 .cpp文件和一个.h文件如何组合在一起。基本上两个.cpp文件都包含.h文件。 .h文件包含声明(对于函数类型和结构类型),但不包括函数定义:
www.learncpp.com/cpp-tutorial/19-header-files /
由于您使用的是g ++,因此可以使用以下命令将它们编译为单个可执行文件:
g ++ -o executable_name main.cpp dijkstra.cpp