gpt4 book ai didi

c++ - 在 header C++ 中初始化变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:09 26 4
gpt4 key购买 nike

编辑:更正函数名称,并添加#pragma once

这是对我的问题的一个非常强大的简化,但是如果我这样做:

啊啊

#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

主要.cpp

#pragma once
#include "B.h"
#include <iostream>

int main(){

changeTestNumber();
std::cout<<testNumber<<std::endl;

return 0;
}

为什么我在调用时没有得到 testNumber = 15?当我使用包含在我包含的 header 的 header 中的函数时,到底发生了什么?如果我从 int testNumber 中删除 static,我会得到一些关于我的 testNumber 被初始化两次的错误。

那么当我这样做时我的头是否被编译了两次?

提前致谢!

最佳答案

除了明显的错误命名(我认为这只是匆忙创建一个类似示例的问题,而不是代码中的实际问题),您需要将变量声明为 extern你的 .h/.hpp 文件。您不能有一个同时也是 staticextern 变量,因为 static 的(其中一个)用途是保持包含该变量在单个 .cpp 文件中。

如果你改变:

static int testNumber = 10;

在你的 A.h 文件中:

extern int testNumber;

然后在您的 A.cpp 文件中执行如下操作:

#include "A.h"
int testNumber = 10;

现在继续运行:

int main() {
//changeNumber();
std::cout << testNumber << std::endl; // prints 10
changeTestNumber(); // changes to 15
std::cout << testNumber << std::endl; // prints 15
std::cin.ignore();
return 0;
}

一定要修复函数名称!

关于c++ - 在 header C++ 中初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36147476/

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