对在头文件中实例化指针感到困惑
Confused about instantiating a pointer in the header file
我正在读一本书,它阐述了在头文件中放入内容的以下原则:
"你可以在头文件中放入什么规则是"仅声明",也就是说,仅向编译器提供信息但没有通过生成代码或创建变量。这是因为通常会包含头文件在一个项目的几个翻译单元中,如果存储一个标识符被分配在多个位置,链接器将出现多重定义错误。。。"
然而,它给出了这样一个头文件的例子:
#ifndef STACK_H
#define STACK_H
struct Stack
{
struct Link
{
void* data;
Link* next;
void initialize(void* dat, Link* nxt);
} *head;
...
};
#endif
变量"head"不是一个对象,违反了这个规则吗?即使它是一个指针,如果多个编译单元包括这个头文件,导致"多定义",它也会占用存储空间并导致问题?
您正在声明一个成员变量。即使它不是指针,也不是问题。它是类(结构)声明的一部分。
只有当您实例化类型为Stack
的对象时,才会实际进行存储分配。
在决定需要将什么放入头文件时,脑海中应该浮现的问题是"这需要事先定义吗?"。在查看实现之前,需要了解用户定义的对象(结构和类)和方法(函数)定义的定义,然后才能在实现中调用它们。
头文件中包含什么
- 数据的定义
- 方法的定义
- 全局变量的分配(有时)
在这种情况下,不会分配任何内容。您在这里所说的是,我们将Stack定义为包含一个成员,该成员是指向链接的指针。当然,我们还需要定义链接,它被定义为在Stack结构的范围内使用。
如果我继续讲下去,我会听起来像这个线程,我会把你的注意力委托给它。理解头文件的想法总是一个棘手的障碍。
相关文章:
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我不能引用指向实例化对象的函数的指针?
- 是否可以将指向未实例化的对象的指针用作C++中的变量?
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 为共享指针C++单独实例化对象
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 模板类实例化中的指针转换无效
- 实例化一个模板类,该类采用具有不同函数签名的构造函数中的函数指针
- 为什么当我在构造函数中创建线程时,实例化对象和对象的指针的行为不同
- make_pair并push_back基指针,并实例化基指针的向量
- 声明基类类型的指针,但随后通过指向子类来实例化它.这是良好的编程实践吗?
- 使用派生类实例化基类,而不在对象定义中使用指针
- (C++)用于实例化新对象并将其分配给指向相同对象类型的指针的 2D 向量的语法
- C 实例化对象,在没有指针的情况下,其他类构造函数中没有默认构造函数
- 用push_back()实例化对象时,如何将指针传递给对象的构造函数
- 如何在 C++ 中的构造函数中正确实例化指针数组
- 使用指针实例化模板类
- 为什么可以从实例化基类对象的投射指针调用非静态派生类方法
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 如何使用智能指针实例化对象