首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C++头中声明数组并在cpp文件中定义它?

在C++中,可以在头文件中声明数组并在cpp文件中定义它。以下是一个示例:

在头文件(例如example.h)中声明数组:

代码语言:cpp
复制
// example.h

extern int myArray[5];

在cpp文件(例如example.cpp)中定义数组:

代码语言:cpp
复制
// example.cpp

int myArray[5] = {1, 2, 3, 4, 5};

在这个示例中,头文件example.h中使用extern关键字声明了一个名为myArray的整型数组,大小为5。这表示myArray是在其他文件中定义的全局变量。然后,在cpp文件example.cpp中,我们使用int关键字定义了myArray,并初始化了数组的元素。

这种方式可以将数组的声明和定义分离,使得多个cpp文件可以共享同一个数组。在其他cpp文件中,可以通过包含example.h头文件来访问和使用myArray数组。

注意:在头文件中只能声明数组,不能定义它。定义数组需要在cpp文件中进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++编译与链接(0)-.h与.cpp中的定义与声明

C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在...*以下所有的讨论都是在全局命名空间中(即不定义自己的namespace)下进行的 函数 1、在.h中只能声明函数,在.cpp中可以声明与定义函数 如果在.h中声明并定义一个函数,则该函数只能被#include...typedef 在不同的cpp中可以一样 变量 1、在.h中只能声明,在.cpp中可以声明与定义一个变量 如果在.h中的定义一个变量,则该变量被include两次以上时则会出现重定义错误 2、在不同....cpp中定义的变量的名字与类型不同一样 常量 1、如果const常量是用常量表达式进行初始化的,则可以在.h中声明与定义 2、如果const变量是用非常量表达式进行初始化的,那么该变量应该在cpp文件中定义...需要到头文件以外去定义它) 类的静态的常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数与模板类的声明与实现必须放在一个文件中 至于为什么会这样,与C++的编译和链接

3.7K70

C++核心准则SF.5: .cpp文件必须包含定义它接口的.h文件

SF.5: A .cpp file must include the .h file(s) that defines its interface SF.5: .cpp文件必须包含定义它接口的.h文件 Reason...Example, bad(反面示例) // foo.h: void foo(int); int bar(long);SF.5: .cpp文件必须包含定义它接口的.h文件 int foobar(int);...// foo.cpp: void foo(int) { /* ... */ } int bar(double) { /* ... */ } double foobar(int); The errors...Example(示例) // foo.h: void foo(int); int bar(long); int foobar(int); // foo.cpp: #include void...当foo.cpp被编译时,foobar的返回值类型错误可以立即被发现。由于可能存在的重载,直到链接时,bar的参数类型错误才能被发现。但是系统性地使用.h文件会提高错误被程序员早期发现的可能性。

54640
  • extern关键字详解

    基本理解 extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。...(详细转到我另一篇博客:https://www.cnblogs.com/WindSun/p/11334182.html) 2.在头文件中: extern int g_Int; 它的作用就是声明全局变量或函数的作用范围的关键字...extern用在变量声明中常常有这样一个作用,在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。...extern的注意事项 (1)extern数组变量 在一个源文件里定义了一个数组:char a[6],在另外一个文件里用下列语句进行了声明:extern char *a是不可以的,便宜可以通过,但运行时出现错误...正是因为static有以上的特性,所以一般定义static全局变量时,都把它放在原文件中而不是头文件,这样就不会给其他模块造成不必要的信息污染。

    1.8K10

    面试题:C++ extern作用?

    面试题:C++ extern作用? 在C++中,关键字extern可以用于声明变量或者函数是在别处定义的。...例如,在main.cpp文件中定义了一个全局变量g_var,并在另外一个文件func.cpp中也希望访问这个全局变量,则需要在func.cpp中使用extern来声明该全局变量的存在,如下所示: //...注意事项 以下是使用extern关键字的几点注意事项: 在变量定义和使用的地方都可以加上extern关键字,但只有在变量定义前面加上extern才表示变量对其他文件是可见的。...如果在一个文件中定义并初始化了一个全局变量,同时在另一个文件中使用该全局变量时不需要extern声明。因为全局变量的定义已经包含了extern的语义。...如果多个文件包含同一头文件,该头文件中定义并初始化了一个全局变量,则所有包含该头文件的文件都将获得对这个变量的定义,此时需要使用关键字extern表示它部分或全部地可能已经定义。

    3800

    C语言ADT(抽象数据类型编程) (含Demo演示文件)

    下面是结合ADT程序设计模式的例子进行介绍: 查看工作区,里面包含三个文件: list.h:数据的定义和声明,接口函数的声明 list.cpp:接口函数的实现 cw0901d.cpp:用于引用和测试代码块...list.h”中定义一种数据类型,这种数据类型一般是适用于你要解决的实际问题的一种结构体,并在此文件中为这种抽象数据类型定义必要的方法,这些方法都在对应的“list.cpp”中进行实现,于是“list.h...在list.h中定义抽象数据并声明接口函数(将代码块定义在一个条件编译#ifndef……#define……#endif中可防止头文件被重复包含) 2....在list.cpp文件的开头包含list.h并实现接口函数) 3....在测试文件cw0901d.cpp文件的开头包含list.h头文件(编译器会自动根据头文件去连接具体的.cpp具体代码实现的文件) 实现上述的三个步骤后,cw0901d.cpp中就能直接对list.h中的数据和方法进行引用了

    1.1K30

    C++编程基础与高级编程

    标识符[=整型常数] } 枚举变量; 当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。...您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。...数组,函数和结构体C语言中的指针被广泛用于数组,函数和结构体中。 它减少了代码并提高了性能。 C++ Null指针:C++支持空指针。NULL指针是一个定义在标准中的值为零的常量。...在C++中,如果派生类定义了与其基类中定义的函数相同,则称函数重写。 C++虚函数是基类中的一个成员函数,您可以在派生类中重新定义它。 它声明使用virtual关键字。...通过在声明中放置“=0”来指定纯虚函数,它的实现必须由派生类提供。 C++命名空间 C++中的命名空间用于组织项目中的类。

    1.9K30

    c++存储类

    C++ 存储类存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。...因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。...可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。...关键字用于声明已经在第一个文件 main.cpp 中定义的 count。...thread_local 存储类使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

    71920

    【c++】模板编程解密:C++中的特化、实例化和分离编译

    源文件: .cpp 或 .cc 文件,包含定义在头文件中声明过的类的成员函数、全局变量的定义等。...这些独立的编译单元最后将被链接成一个单个的可执行文件 模版分离编译 假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义: 在头文件 a.h 中声明了一个函数模板 Add: template..." int main() { Add(1, 2); Add(1.0, 2.0); return 0; } 存在问题: 在 C++ 中,编译器需要在编译时知道模板函数的完整定义,因为它必须用具体的类型对模板进行实例化...非模板函数的声明和定义分离 对于非模板函数,你可以在头文件中声明它们,并在一个单独的源文件中定义它们。...当编译器编译调用该函数的源文件时,它只检查函数的声明(通常在一个头文件中);实际的函数定义可以在程序的其他部分单独编译 // func.h void myFunction(int x); // 声明

    62410

    C++ 存储类

    存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。...因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。 static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。...可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。...extern 关键字用于声明已经在第一个文件 main.cpp 中定义的 count。...thread_local 存储类 使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。变量在创建线程时创建,并在销毁线程时销毁。每个线程都有其自己的变量副本。

    89410

    c++存储类

    C++ 存储类 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。...因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。 static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。...可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。... extern 关键字用于声明已经在第一个文件 main.cpp 中定义的 count。...thread_local 存储类 使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

    62150

    云课五分钟-02第一个代码复现-终端甜甜圈C++

    t=7.7 云课五分钟-02第一个代码复现-终端甜甜圈C++ 文本 如何使用g++ 使用g++编译和链接C++程序的基本步骤如下: 编写源代码:首先,你需要编写C++源代码,并保存为.cpp文件。...基本的语法是: g++ [options] filename 例如,要编译hello.cpp文件,你可以输入以下命令: g++ -o hello hello.cpp 在上面的命令中,-o hello...运行可执行文件:如果编译成功,g++将生成一个可执行文件。在上面的示例中,它将生成一个名为hello的可执行文件。你可以通过在终端中输入以下命令来运行它: ....变量声明:在main()函数中,声明了一些变量,包括浮点数A、B、i、j和整数k。还声明了两个大小为1760的浮点数组z和字符数组b。...无限循环:程序进入一个无限循环,循环体中的代码用于生成动画效果。 初始化操作:在每次循环开始时,使用memset()函数对字符数组b和浮点数组z进行初始化。

    16020

    Thrift之代码生成器Compiler原理及源码详细解析3

    3 生成C++语言代码的代码详解 这个功能是由t_cpp_generator类实现(在文件t_cpp_generator.cc定义和实现),直接继承至t_oop_generator类(这个类是所有面向对象语言生成器类的直接基类...gen_pure_enums_) { indent_down(); f_types_ << “};” << endl; } f_types_ << endl; 接着在后面在实现文件中定义一个整型数组和一个字符的数组并用定义的枚举类型的常量值来初始化这两个数组...”; ofstream f_consts_impl; f_consts_impl.open(f_consts_impl_name.c_str()); 接着按照就开始按照类的定义格式在头文件中生成定义类的代码并在实现文件中定义这个类的常量类型...,只是在实现文件中定义了一个类的全局常量对象,在头文件中声明,以便其他地方可以被使用。...设计这个功能的目的是为了灵活控制数据传输的结构; 第三步:开始生成定义类(IDL文件中定义的struct在C++都是用class来实现)的代码,生成的代码主要包括默认的构造函数、析构函数、各个字段

    1.3K60

    C语言到C++的OOP 面向对象编程

    #include 是一个“包含命令”,它的作用是将文件iostream的内容包含到该命令所在的程序文件中,代替该命令行。...Cpp标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到Cpp标准库(此时就需要用#include命令行),就需要用“using namespace std;”作声明,表示要用到命名空间...(3) 全局变量 在所有函数体外部定义的变量,其作用范围是整个程序,并在整个程序运行期间有效。 在C语言中,全局变量声明必须在任何函数之前,局部变量必须集中在可执行语句之前。...Cpp中的变量声明非常灵活,它允许变量声明与可执行语句在程序中交替出现。...如果函数原型中未注明参数,Cpp假定该函数的参数表为空(void)。 6、const修饰符 在C中,习惯使用#define定义常量。

    3.2K2218

    C++的extern关键字知识点

    第二,当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用...2 问题:extern 变量   在一个源文件里定义了一个数组:char a[6];   在另外一个文件里用下列语句进行了声明:extern char *a;   请问,这样可以吗?    ...原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。...    然后把test1.cpp中的g_str的定义去掉,这个时候再编译连接test1和test2两个模块时,会报连接错误,这是因为你把全局变量g_str的定义放在了头文件之后,test1.cpp这个模块包含了...,所以 请记住, 只在头文件中做声明,真理总是这么简单。

    1K40

    C++ 面试必备:常见 C++ 面试题汇总及详细解析

    内存用法 数组名是一个指向数组首元素的常量指针,它存储的是数组首元素的地址。而指针是一个变量,它存储的是某个对象的地址。...C++ extern作用? 在C++中,extern关键字用于声明一个已经在别处定义的变量、函数或类的引用,从而允许在一个文件中使用在其他文件中定义的全局变量、函数或类。...比如,如果在一个.cpp文件中定义了一个全局变量int globalVar = 10;,那么在另一个.cpp文件中可以通过使用extern int globalVar;来引用这个全局变量,从而可以使用它的值...此外,extern关键字还可以用于在多个文件中共享一个函数或类的定义。...例如,如果有一个类的定义在一个.h文件中,那么在多个.cpp文件中可以使用extern关键字来声明这个类的引用,从而可以在这些文件中使用这个类的成员函数。 C++函数调用的过程?

    2.2K30

    【CC++】extern 的一些注意事项

    前言 前些日子,有友友问了我这样的一道问题: 数组通过外部声明为指针时,数组和指针是不能互换使用的;那么请思考一下,在 A 文件中定义数组 char a[100];在 B 文件中声明为指针:extern...extern char a[]; 这是一个外部变量的声明,它声明了一个名为 a 的字符数组,编译器看到这个声明就知道不必为这个变量分配空间,这个 .cpp 文件中所有对数组 a 的引用都化为一个不包含类型的标号...这里问题就出现了:由于在这个文件中声明的 a 是一个指针变量而不是数组,链接器的行为实际上是把指针 a 自身的地址定位到了另一个 .c 文件中定义的数组首地址上,而不是我们所希望的把数组的首地址赋予指针...变量 a 在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字 extern 声明。...int foo(int x, int y); #endif 在模块 B 中引用该函数: // 模块B实现文件 moduleB.cpp #include "moduleA.h" foo(2, 3

    38010

    C++ 中 extern 数组和指针

    在一次使用 extern 声明全局变量的过程中,因为数组和指针的混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含的)文件中的全局变量。...1 extern char a[]; 这是一个外部变量的声明,它声明了一个名为 `a` 的字符数组,编译器看到这个声明就知道不必为这个变量分配空间,这个 .cpp 文件中所有对数组 `a` 的引用都化为一个不包含类型的标号...extern char * a; 这是一个外部变量的声明,它声明了一个名为 a 的字符指针,编译器看到这个声明就知道不必为这个指针变量分配空间,这个 .cpp 文件中所有对指针 a 的引用都化为一个不包含类型的标号...假如我们在头文件中定义一个全局变量,有多个文件同时 include 这个文件,我们知道 include 本质就是内容替换,因此就造成了该全局变量被重复定义。...因此如果是多个文件链接在一起的情况,通常是在 cpp 文件中定义全局变量,而在另外一个 cpp 文件中使用时通过 extern 声明该变量。

    45900

    【C++】详解命名空间

    我们自己也可能会有这样的冲突,如下所示: 当我们在多个文件中定义同名变量时,也会出现重定义的问题。...,如下所示: 因此我们只能在.cpp的文件下正常使用,如下所示: 可以看到,当我们在创建好.cpp的文件后再来使用命名空间,这时是没有任何问题的,因此我们一定要记住这个结论——命名空间只能在.cpp的环境下使用...func2、和一个函数test5,然后新建了一个项目test4.cpp,并在该项目中创建了一个全局变量y,然后在test3.cpp这个项目中通过extern进行了声明。...20,并通过extern这个关键字进行了全局变量的声明,因此它的结果就是我们初始化的结果;而对于局部变量z,当我们将test5函数中对z进行访问的代码屏蔽后,此时程序正常运行,并在func2函数中成功进行了访问...test4.cpp,所以我们在test3.cpp这个项目中进行使用时需要通过extern来进行声明,声明后,它也能在该项目中正常使用; 对于局部变量z而言,它的作用域就是它所在的局部域,也就是func2

    12310
    领券