我想了解如何在C++中编译类。为什么我可以在不执行其中一项功能的情况下成功编译?
为什么下面的代码编译成功? Foo()
需要执行编译才能成功吗?
class Test{
public:
Test() {}
int Foo();
};
int main()
{
Test obj;
return 0;
}
我想了解如何在C++中编译类。为什么我可以在不执行其中一项功能的情况下成功编译?
为什么下面的代码编译成功? Foo()
需要执行编译才能成功吗?
class Test{
public:
Test() {}
int Foo();
};
int main()
{
Test obj;
return 0;
}
代码中没有Book()
。如果你正在谈论Foo()
,那么你永远不会在你的代码中使用这个函数,所以链接器永远不会被问到,并且会以“未定义的函数”或者类似的错误失败。
没有人试图调用Foo
,所以链接器不会抱怨缺少的实现,因为它不是必需的。
如果你写了virtual int Foo();
,你会看到一个链接错误。
为什么_ **虚拟** _会导致错误?什么改变? – Emadpres
@EmAdpres:请参阅http://stackoverflow.com/q/3560786/14065 –
@EmAdpres:您需要在vtable中输入一个条目。 –
'Book()'在哪里? –
“编译器如何工作?” - http://en.wikipedia.org/wiki/Compiler –
你知道我的意思 – Emadpres