我知道如何从第二个.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函数中输入。 (你可以想象......&#34; apple_prize?&#34; cin&gt;&gt; ...&#34; cherry_prize?&#34; cin&gt;&gt; ...
很长时间以来我想把这个块放在一个额外的文件中以减轻main.cpp的可读性。在main()
我的开头,然后写void prizes();
以包含该过程)。
所以在第二个.cpp文件中就像std::cin >> a_wt;
一样。
除此之外,我在头文件中声明了int a_wt;
并将此头文件放在两个.cpp文件中。
在编译main.cpp时,我得到了错误&#34; 未初始化的局部变量&#39; a_wt&#39;使用&#34;
如何让main.cpp文件看到它应该是耐心的,它将在第二个.cpp中正确初始化,然后才能在上面的transform
行中使用它?我认为头文件将确保两个.cpp文件将&#34;看到&#34;彼此。
(当我在main.cpp中拥有所有代码时,代码通常正在运行。)
非常感谢您的帮助!
ps:关于将大量不重要的代码导出到第二个.cpp文件中;还有其他方法可以将它放在第二个文件的void函数中吗? 一些链接就足够了,因为我自己要学习它而不想花太多时间。
答案 0 :(得分:0)
有点不清楚你正在尝试做什么,但是考虑在标题中将变量声明为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
如果你想通过更复杂的东西来初始化全局变量,那么你可以将它定义为extern
的函数,而不是将其定义为static
,并将其用作该函数的结果,如
// 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();
但是,尽量减少全局变量的使用,因为它们会使您的代码更难阅读,更少本地化,并且容易产生令人讨厌的副作用。