gpt4 book ai didi

c++ - 如何在不同文件中使用对象 vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:54 24 4
gpt4 key购买 nike

我如何访问在头文件中声明并在源文件中填充的主文件中的静态 vector 变量。实际代码有点大,所以下面是我尝试过的示例。

class.h

class a{

private:
int x;

public:
friend void createVec();
};

void createVec();
static std::vector<a> vec;

源.cpp

include"class.h"

extern std::vector<a> vec; //if i remove this line code runs and don't show any error
// -of undefined variable
void createVec()
{
for(int i=0; i<9; i++)
{
vec.push_back(i); //while debugging and watching vec, code is able to populate vec
//but i doubt whether is it vector declared in class.h or not
}
}

main.cpp

#include "class.h"

extern std::vector<a> vec;
int main()
{
createVec();
cout<<vec.size() //it prints 0 instead of 10
}

最佳答案

在您的示例中,您要声明 vec成为static .在此上下文中(全局/静态变量),这意味着该变量应仅存在于找到声明的翻译单元(.cpp 文件)中。

由于您已将其放入 .h 文件和 #include d 这个在几个源文件中,两个 .cpp 文件都有自己的 static std::vector<a> vec ,而不是共享同一个。因此,在一个文件中推回不会影响另一个文件中的 vector 。

这里的解决方案是删除static来自 vec 的声明并将其移至 cpp 之一文件。

澄清一下:将变量的声明放入全局范围会自动为其提供静态存储期限,这意味着它的生命周期在main 之后结束。返回。使用 extern意味着您指定该变量已在另一个 .cpp 文件中声明。声明一个全局变量 static仅意味着它在其他 .cpp 文件中不可用。因此,如果你想在多个 .cpp 文件中使用一个全局变量,它应该在一个文件中声明,而不是静态的,你应该将它声明为 extern。在使用它的所有其他 .cpp 文件中。

关于c++ - 如何在不同文件中使用对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856665/

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