C++ 在将被多次使用的函数中存储变量的最佳方法(c+;+;)

C++ 在将被多次使用的函数中存储变量的最佳方法(c+;+;),c++,variables,structure,C++,Variables,Structure,主要思想: 我为dijkstra的算法写了一段代码,我是dandy。但是,我需要在其他代码和东西中调用函数(从头文件)。但我只需要在调用函数时存储变量(因此,一旦调用函数,它将返回变量,但不会返回以前调用的变量)。我需要引用这些变量和其他代码/文件 如何存储变量: 包含两个向量的结构 我的问题: 最好创建一个.h文件来存储一个结构,并在其中更改变量,还是有一种方法可以从另一个文件中的另一个函数调用变量并使用它,而不必担心内存问题等等 还有。。。如果我的int main不带参数,我将如何为这个di

主要思想:

我为dijkstra的算法写了一段代码,我是dandy。但是,我需要在其他代码和东西中调用函数(从头文件)。但我只需要在调用函数时存储变量(因此,一旦调用函数,它将返回变量,但不会返回以前调用的变量)。我需要引用这些变量和其他代码/文件

如何存储变量:

包含两个向量的结构

我的问题:

最好创建一个.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()。建议

-编辑dos-

建议的修复方案

.h应包括:

struct_name dijkstra(input variables)
#include "dijkstra.h"

typedef struct{
blah...
}struct_name;

struct_name dijkstra{
struct_name retval;

function def...
return retval;
}
#include "dijkstra.h"
#include "dijkstra.cpp"

int main(){

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

return 0;
}
.cpp应包括:

struct_name dijkstra(input variables)
#include "dijkstra.h"

typedef struct{
blah...
}struct_name;

struct_name dijkstra{
struct_name retval;

function def...
return retval;
}
#include "dijkstra.h"
#include "dijkstra.cpp"

int main(){

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

return 0;
}
main.cpp应包括:

struct_name dijkstra(input variables)
#include "dijkstra.h"

typedef struct{
blah...
}struct_name;

struct_name dijkstra{
struct_name retval;

function def...
return retval;
}
#include "dijkstra.h"
#include "dijkstra.cpp"

int main(){

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

return 0;
}

通常,您将传入算法需要的所有输入数据作为输入参数,并将算法创建的所有有用输出数据作为返回类型返回。如果需要将几条信息捆绑在一起,可以创建单独的C++结构或类。 对于算法内部使用的数据结构,通常只在.cpp文件中声明,而不是在.h文件中声明。因此,用户将无法访问/查看内部构件(如果您希望以后更改其工作方式,这将非常有用)

因此,头文件应该只有函数声明——带有输入参数和输出返回类型。所有算法代码都进入.cpp文件,其中包括.h文件。头文件是“接口”,cpp文件是“实现”,我们试图将其分开

编辑:(总结后续讨论中的有用点)

本教程显示了2.cpp文件和1.h文件是如何组合在一起的。基本上,两个.cpp文件都包括.h文件。.h文件包括声明(函数类型和结构类型),但不包括函数定义:

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

由于您使用的是g++,因此可以使用以下命令将其编译为单个可执行文件:


g++-o可执行文件\u name main.cpp dijkstra.cpp

我们在这里讨论的是多少内存?对我来说似乎不是问题。你的意思是将算法内部流程数据存储在全局可访问的变量中(即在其他函数中)?并且,您希望在调用之间共享数据,或者在每次dijkstra的算法调用中重新启动数据?是的,我需要在每次调用中重新启动数据。请参阅下面的答案注释。这是将数据传递给函数调用的常用方法-将值作为函数参数传递。如果您的输入数据非常大,那么这种方法就没有意义(您不想单独复制输入数据),谢谢Graham。你的建议是我打算怎么做,但我仍然需要弄清楚一些事情:所以本质上我有一个结构,对吗?dijkstra函数将接受它,进行更改并返回它。那很好。但每次编译时都会出现未定义的int main()错误。所以我加入了和int main(int argc,const char*argv)并调用其中的dijkstra函数。到目前为止一切都很好。但是我担心如果我通过头文件调用它,我将无法引用另一个文件的结构。是的,完全同意你的看法。但是在dijkstra.cpp文件中,我得到了一个未定义的主错误。我需要某种int main(),让我试一试,谢谢。另外,如何在不同文件中的另一个函数中初始化返回的结构?嘿,格雷厄姆,请查看我的第二次编辑。我想我打了太多的电话(我认为每个文件中都有一个电话……出现了多定义错误)。我的编辑中有一个建议的修复。