定义全局和范围之间的区别

时间:2016-01-30 23:16:17

标签: c++ global-variables main

所以,我有一个全局声明的变量。要使用它,必须定义它。根据我是全局定义还是在 main 函数的范围内,我得到不同的结果。

这是基本代码:

// main.cpp

//int variable = 3;

int main()
{
    //int variable = 5;

    func();

    return variable;
}

// source.cpp

#include "source.hpp"

void func()
{
    cout << variable << endl;
}

// source.hpp

#ifndef __SOURCE_HPP_INCLUDED__
#define __SOURCE_HPP_INCLUDED__

#include<iostream>
using namespace std;

extern int variable;
void func();

#endif  // __SOURCE_HPP_INCLUDED__

所以,如果我全局定义(在 main 之外),那么一切正常。但是如果我在 main 中定义,那么我得到&#34;未定义的引用&#39;变量&#39;&#34;错误。但是当我在 main 里面时,我只会调用 source.cpp ;那么为什么我会在同一&#34;范围内定义变量时出现此错误&#34;作为 func ?是编译器只是在链接完成之前先发制错误吗?或者它与我宣布为&#34; extern&#34;?

的事实有关

1 个答案:

答案 0 :(得分:0)

您无法在函数内定义全局变量。你实际上是在定义一个恰好具有相同名称的不同的,不相关的局部变量。

func引用全局变量,因此您必须有一个定义。