【发布时间】:2017-04-05 22:06:38
【问题描述】:
我在一个类的 C++ 前向声明中发现了一个错误,它被错误地声明为 struct Book 而不是 class Book。我认为 Book 曾经是一个结构体,现在变成了一个类,但前向声明仍然存在。
书.h:
class Book {
...
};
库.h:
struct Book;
class Library {
std::vector<Book*> books;
};
没有编译器警告,生成的程序似乎运行良好。这让我很好奇:理论上,这会导致问题吗?它只是一个指针,是的,但是例如,如果类有虚方法,多重继承,指针会不同吗?
我知道类/结构在默认公共/私有方面的区别,但我特别询问前向声明以及交换它们的可能后果。
更新较新版本的 Xcode 现在会在出现不匹配时发出此警告:
Struct 'Book' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI
【问题讨论】:
-
这在C++中并没有错,但是VS可能会让你有些悲痛。
-
@Danh 编辑问题以解释差异。
标签: c++ struct forward-declaration