Tom*_*rle 16 c++ struct forward-declaration
我在类的C++前向声明中发现了一个错误,它被错误地声明为struct Book而不是class Book.我认为Book曾经是一个结构,变成了一个类,但前向声明仍然存在.
Book.h:
class Book {
...
};
Run Code Online (Sandbox Code Playgroud)
Library.h:
struct Book;
class Library {
std::vector<Book*> books;
};
Run Code Online (Sandbox Code Playgroud)
没有编译器警告,结果程序似乎工作正常.这让我很好奇:理论上,这会不会引起问题?它只是一个指针,是的,但是,例如,如果类有虚方法,多继承,指针可能不同吗?
我知道关于默认公共/私有的类/结构之间的区别,但我特别询问前向声明和交换它们的可能后果.
Sto*_*ica 20
struct并且class是完全可以互换尽可能向前声明有关.即使对于定义,它们也仅影响对象成员的默认访问说明符,其他所有内容都是等效的.您始终定义对象的"类".
struct必须使用的唯一地方class是向前声明c绑定的不透明数据.
关于你的编辑:
我知道关于默认公共/私有的类/结构之间的区别,但我特别询问前向声明和交换它们的可能后果.
Visual C++生成警告C4099.它这样做,因为其功能的名称装饰包含您使用的关键字.因此,程序可能无法正确链接.因此,在使用VC++时,完全符合标准的兼容代码可能无法链接(在Microsoft的部分,Ahead是一个傻瓜移动).
可以在此处找到对此警告的讨论,以及为什么在您受到纪律处分时可以忽略的警告