首页
学习
活动
专区
工具
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.6K70

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文件会提高错误被程序员早期发现的可能性。

54240
  • 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语言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 说明符声明的变量仅可在它在其上创建的线程上访问。 变量创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

    71020

    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); // 声明

    55710

    C++ 存储类

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

    88510

    c++存储类

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

    61550

    云课五分钟-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进行初始化。

    15620

    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文件定义的structC++都是用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.1K30

    C++ extern 数组和指针

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

    43100

    【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

    35510

    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

    10210

    嵌入式面试高频考点整理(建议收藏)

    静态成员变量并不像一般的成员变量构造函数初始化,而是类的实现文件初始化,即必须在.cpp文件初始化,否则在程序链接时会出错,重定义,且初始化时无需再使用static关键字修饰。...定义声明的区别 声明是将一个名称引入程序,定义提供了一个实体程序的唯一描述。 什么是野指针 访问一个已销毁或者访问受限的内存区域的指针。...怎么确定一个程序是C编译的还是C++编译的 如果编译器在编译cpp文件那么__cplusplus就会被定义 如果是一个c文件在被编译那么__STDC__就会被定义。...C++内存泄漏的几种情况[17] 类的构造函数和析构函数没有匹配的调用new和delete函数 没有正确地清除嵌套的对象指针 释放对象数组delete没有使用方括号 指向对象的指针数组不等同于对象数组...用 C++设计一个不能被继承的类 将自身构造函数和析构函数声明为private。 什么是纯虚函数 基类声明的虚函数,仅有声明无实现。要求派生的子类必须定义自身的实现方法,达到多态效果。

    73720
    领券