【发布时间】:2016-03-22 06:21:26
【问题描述】:
编辑:更正函数名称,并添加#pragma once
这是对我的问题的一个非常强大的简化,但如果我这样做:
啊.h
#pragma once
static int testNumber = 10;
void changeTestNumber();
A.cpp
#pragma once
#include "A.h"
void changeTestNumber()
{
testNumber = 15;
}
B.h
#pragma once
#include "A.h"
// some other stuff
B.cpp
#pragma once
#include "B.h"
// some other stuff
main.cpp
#pragma once
#include "B.h"
#include <iostream>
int main(){
changeTestNumber();
std::cout<<testNumber<<std::endl;
return 0;
}
为什么我在调用时没有得到 testNumber = 15? 当我使用包含在包含的标头的标头中的函数时,会发生什么? 如果我从 int testNumber 中删除 static,我会收到一些关于我的 testNumber 被初始化两次的错误。
那么当我这样做时,我的标头是否编译了两次?
提前致谢!
【问题讨论】:
-
一个函数叫做
changeNumber(你的原型),另一个叫做changeTestNumber(定义) -
TL;DR:是的,有多个“testNumber”变量,每个标题包含一个。通常,开发人员会将静态文件放入 cpp 文件并使用“#pragma once”来控制标头定义其值的次数。有关“静态”的许多用途的更多信息可以在此站点上的其他软件中找到:stackoverflow.com/questions/15235526/…
-
函数名错误是拼写错误,将编辑。我的“真实”代码中有一次#pragma,也应该把它放进去。谢谢你会检查那个链接!
标签: c++ header initialization