全局定义和范围内定义的区别
Difference between defining globally and within scope
所以,我有一个全局声明的变量。为了使用它,必须对其进行定义。根据我是全局定义还是在 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 中定义,那么我会得到"对'变量'的未定义引用"错误。但我只调用源.cpp当我在主内部时;那么,如果变量是在与 func 相同的"范围"内定义的,为什么会出现此错误?是编译器只是在链接完成之前先发制人地给出错误吗?还是与我将其声明为"外部"有关?
不能在函数中定义全局变量。您实际上是在定义一个不同的、不相关的局部变量,它恰好具有相同的名称。
func
引用全局变量,因此必须为其定义。
相关文章:
- 定义类模板构造函数的两种方法之间的区别
- 在类内和类外的定义处执行类转发声明是否有区别
- 定义带和不带INCLUDED_HEADERNAME_H的标头有什么区别
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- 为什么相同的函数签名只有区别,另一个通过 const 获取参数是重新定义?
- 将类类型成员定义为公共和私有之间有什么区别?
- pimpl和定义类别的.cpp文件之间的区别
- 用户定义的类和标准类之间有区别吗?
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 未定义的行为和格式错误之间的区别,不需要诊断消息
- C++中变量的声明和定义之间有什么区别
- C++-CPP和H中定义的内联之间有什么区别
- 将函数定义为静态成员和自由成员之间有什么区别
- 定义 char 和 int 时指针有什么区别
- 当C++中都没有在基类中定义虚函数和纯虚函数时,虚拟函数和纯虚函数有什么区别
- 这两个类型定义有什么区别?
- RCDATA 和用户自定义资源有什么区别?
- 全局定义和范围内定义的区别
- 这两个高阶函数定义之间有什么区别吗?
- 在代码中定义字符串与控制台输入之间的区别