gpt4 book ai didi

c++ - C++ 中多个文件的声明/初始化问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:56 25 4
gpt4 key购买 nike

我知道如何从第二个 .cpp 文件调用一个简单的函数(即 add(int x, int y){return x+y;} 等等)。现在我想更进一步,遇到以下问题:在我的 main.cpp 中,我得到了这样一行(重要的部分是末尾的变量 a_wt):

transform(a_att.begin(), a_att.end(), a_att.begin(), std::bind1st(std::multiplies<float>(), a_wt));

所以,但现在我得到了第二个 .cpp 文件,我在其中放置了一大块重复代码,要求在 void 函数中输入。 (你可以想象像“apple_prize?”cin >> ...“cherry_prize?”cin >> ...太长了,我想把这个 block 放在一个额外的文件中,以减轻 main.cpp 的可读性。在 main() 的最开始,我正在编写 void prizes(); 以在其中包含该过程)。所以在第二个 .cpp 文件中有类似 std::cin >> a_wt; 的东西。

除其他事项外,我在头文件中声明了 int a_wt; 并将此头文件放入两个 .cpp 文件中。编译 main.cpp 时出现错误“使用了未初始化的局部变量‘a_wt’”。

我怎样才能让 main.cpp 文件看到它应该有耐心,并且在上面的 transform 行中使用它之前,它会在第二个 .cpp 中正确初始化?我认为头文件将确保两个 .cpp 文件将“看到”对方。(当我将所有内容都放在 main.cpp 中时,代码正常运行)。

非常感谢您的帮助!

ps:关于将大量不重要的代码导出到第二个 .cpp 文件中;除了将它放在第二个文件的 void 函数中之外,还有其他方法吗?一些链接就足够了,因为我愿意自己学习,不想占用你太多时间。

最佳答案

有点不清楚您要做什么,但请考虑在 header 中将变量声明为 extern int a_wt;,然后将其定义在一个 .cpp 文件中,并确保您在两者中都包含标题。示例

// header.h
extern int a_wt;

// file1.cpp
#include "header.h"
int a_wt = 42; // need the definition in one translation unit

// file2.cpp
#include "header.h"
// file2 has access to a_wt now

如果你想用更复杂的东西来初始化全局变量,那么你可以将它定义到一个函数中作为 static 而不是让它成为 extern 并将它用作该函数的结果,例如

// header.h
int get_a_wt();

// file1.cpp
#include "header.h"
int get_a_wt()
{
static int a_wt;
// initialize it here
return a_wt;
}

// file2.cpp
#include "header.h"
// use get_a_wt() instead of a_wt
int something = get_a_wt();

但是,尽量减少全局变量的使用,因为它们会使您的代码更难阅读、更少本地化,并且容易产生严重的副作用。

关于c++ - C++ 中多个文件的声明/初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com