C++ 为什么要编译下面的代码 #包括 使用名称空间std; 福班{ 空杆(空杆)常数; }; int main() { 福福; cout

C++ 为什么要编译下面的代码 #包括 使用名称空间std; 福班{ 空杆(空杆)常数; }; int main() { 福福; cout,c++,linker,C++,Linker,我只能想象,由于未定义Foo::Bar,您会得到一个错误。标准中的一个定义规则只要求定义使用的元素。在您的特定情况下,您的程序中没有任何内容使用Foo::Bar,因此程序不需要该定义。这将链接,因为没有对Foo::Bar的未完成引用,并且不需要对其定义进行任何修改。如果您实际尝试进行f.Bar()之类的调用,则会出现错误。没有链接器错误,因为所有依赖项都已解决 只要你调用方法Bar(),并且没有定义它,你就会得到一个链接器错误。因为你引用了Bar(),而链接器无法解决它。为什么你会期望链接器错误

我只能想象,由于未定义
Foo::Bar
,您会得到一个错误。标准中的一个定义规则只要求定义使用的元素。在您的特定情况下,您的程序中没有任何内容使用
Foo::Bar
,因此程序不需要该定义。

这将链接,因为没有对Foo::Bar的未完成引用,并且不需要对其定义进行任何修改。如果您实际尝试进行f.Bar()之类的调用,则会出现错误。

没有链接器错误,因为所有依赖项都已解决


只要你调用方法
Bar()
,并且没有定义它,你就会得到一个链接器错误。因为你引用了
Bar()
,而链接器无法解决它。

为什么你会期望链接器错误?可能是因为
Foo::Bar
未定义。@filmor你看到使用它的地方了吗(即被调用或其地址被占用)?我更关心返回…@H2CO3我没有说我预期会出现链接器错误;)我更喜欢你的答案。是的…调用Bar()会给出错误。但我不知道依赖性。此外,它是否在标准中?
#include<iostream>
using namespace std;
class Foo {
void Bar( void ) const ;
};
int main()
{
  Foo f;
  cout<<sizeof(f)<<endl;
}