向前声明为结构与类
Forward declaration as struct vs class
我在类的C 正向声明中发现了一个错误,该声明被错误地声明为struct Book
而不是class Book
。我认为书曾经是一个结构,被改为课程,但远期声明仍然存在。
book.h:
class Book {
...
};
library.h:
struct Book;
class Library {
std::vector<Book*> books;
};
没有编译器警告,结果计划似乎很好。这让我很好奇:从理论上讲,这是否会引起问题?这只是指针,是的,但是例如,如果班级具有虚拟方法,多个继承,指示器会有所不同吗?<<<<<<<</p>
我知道类/结构之间关于默认公共/私人的类/结构之间的差异,但我专门询问交换它们的远期声明和可能的后果。
update Xcode的新版本现在在不匹配时发出此警告:
Struct 'Book' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI
struct
和 class
就向前声明而言是完全可互换的。即使对于定义,它们也只会影响对象成员的默认访问说明符,其他所有内容都是等效的。您总是定义对象的"类"。
唯一必须在class
上使用struct
的地方,是当向前声明C绑定不透明数据时。
关于您的编辑:
我知道类/结构之间关于默认公共/私人的类/结构之间的差异,但我专门询问交换它们的远期声明和可能的后果。
视觉C 产生警告C4099。它这样做,因为其功能的名称装饰包含您使用的关键字。因此,程序 May 无法正确链接。因此,当使用VC 时,完全符合标准的代码可能不会链接(Microsoft的部分移动,AFAIC)。
对此警告的讨论,以及如果您受到纪律处分,可以忽略它,可以在此处找到
相关文章:
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 结构声明中的 if 语句C++
- 这个嵌套结构声明是什么意思?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 为什么结构声明在C++中违反了 ODR
- 错误:多个文件中的结构声明冲突
- 为什么调用定义的构造函数会导致结构声明中出现错误,我该如何修复它
- C++数据结构声明
- 相互依赖的结构声明
- 结构声明的数组
- 结构声明中的":"是什么意思
- 面向C++的main.cpp中的可视化结构声明问题
- 当某些结构字段被省略或与结构声明中的顺序不同时,如何实现正确的解析?
- 编译器在转发结构声明上出错
- C++生成器 XE4 中的结构声明
- 我无法理解c ++中的结构声明
- 嵌套结构声明以及如何访问它们
- 将包含单个数组的结构声明为packed有什么缺点吗
- 定义之前的结构声明