gpt4 book ai didi

由 2 个文件共享的 C++ 变量

转载 作者:太空狗 更新时间:2023-10-29 23:28:36 25 4
gpt4 key购买 nike

我有 4 个文件:

  • 共享.h
  • main.cpp
  • something.h
  • something.cpp

共享.h:

#ifndef SHARED_H
#define SHARED_H

int* sth;

#endif

something.h:

#ifndef SOMETHING_H
#define SOMETHING_H

class foo
{
public:
void printVar();
};

#endif

something.cpp:

#include <iostream>
#include "something.h"
#include "shared.h"

using namespace std;

void foo::printVar()
{
cout<<"Foo: "<<*sth<<endl;
};

ma​​in.cpp:

#include <cstdlib>
#include <iostream>
#include "shared.h"
#include "something.h"

using namespace std;

int main(int argc, char *argv[])
{
sth=new int(32);

foo x;
cout<<"Main: "<<*sth<<endl;
x.printVar();

system("PAUSE");
return EXIT_SUCCESS;
}

编译器返回 *sth 的多个定义;

我向 *sth 添加了静态修饰符,它可以编译,但会崩溃。我更改了打印以打印指针的地址,并且程序已返回:

Main: 0x3e0f20
Foo: 0

为什么 foo 的指针没有赋值?我只想在主文件中分配一次,然后在其他文件中共享...我该怎么做?是否带有 extern 修饰符?

感谢任何回复。

最佳答案

在 shared.h 你想说:

extern int* sth;

向编译器保证某处存在某物。

然后在您需要编写的一个(且只有一个).cpp 文件中:

int* sth;

让它真实存在。一般来说,您可能想阅读有关 the difference between declaration and definition 的内容.根据经验,您只想在头文件中声明内容,而不是定义它们。

当您之前编写 static 时,您说每个文件中都存在一个同名变量,但对每个文件都是“本地的”,即 main 中的 sth。 cpp 不会与 something.cpp 中的 sth 相同。

关于由 2 个文件共享的 C++ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9929468/

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