c++ - 用 extern 尝试一些简单的事情

标签 c++ extern

我正在尝试了解“extern”的作用。我有一个简单的程序,在 main 的头文件中,用 extern 声明了一个变量。主要是定义该变量。然后 Main 调用另一个类文件中的方法(包含 main 的 header ,因此它应该可以访问外部变量),以便打印该变量的值。但是我得到一个编译器错误:“未解析的外部符号”int myglobal”。有人可以帮忙吗?谢谢!

如果我在 source.cpp 文件中删除对这个变量的引用,代码运行正常。

源代码.cpp

#include "main.h"
#include <iostream>

void printGlobal()
{
    std::cout << "Global: " << myglobal;
}

来源.h

void printGlobal();

主要.h

extern int myglobal;

主要.cpp

#include "main.h"
#include "Source.h"

int main()
{
    int myglobal = 5;
    printGlobal();
    system("pause");
    return 0;
}

最佳答案

extern 仅适用于全局范围。如果我说 extern int myint; 这意味着某处有一个文件有 int myint; 在任何函数之外这是全局范围

还有通过 static int myint; 的文件范围,这意味着其他文件将无法通过 extern 访问它

将 main.cpp 更改为

#include "main.h"
#include "Source.h"
int myglobal = 5;

int main()
{

    printGlobal();
    system("pause");
    return 0;
}

文件作用域

#include "main.h"
#include "Source.h"
static int myglobal = 5;
int main()
{

    printGlobal();
    system("pause");
    return 0;
}

关于c++ - 用 extern 尝试一些简单的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636161/

相关文章:

c++ - 我的 C++ 内联方法是否应该显式声明为内联?

c++ - C++上的 vector 迭代器

c++ - 危险指针如何在不使用锁的情况下安全地回收并发数据结构中的内存?

c++ - 外部如何工作?

C++ 变量头作用域

c++ - 具有特征矩阵的类的连续数据?

c++ - 无法编译opencv: undefined reference 未读等

c++ - extern 必须有权访问类构造函数吗?

c - 为什么 "const extern"报错?

c++ - 与 extern "C"函数的友元似乎需要::来限定名称