#include<iostream>
using namespace std;
class Foo {
void Bar( void ) const ;
};
int main()
{
Foo f;
cout<<sizeof(f)<<endl;
}
これを g++ で実行しましたが、コンパイル エラーは発生しませんでした。また、正しい o/p 1 を指定して実行しました。しかし、リンク中にエラーが発生することを期待していました。このコンパイラは依存していますか?
Foo::Bar
が定義されていないため、エラーが発生することを期待していたとしか想像できません。標準の 1 つの定義規則では、使用される要素を定義することのみが必要です。あなたの特定のケースでは、あなたのプログラムでは何も使用 Foo::Bar
しないので、プログラムはその定義を必要としません。
すべての依存関係が解決されるため、リンカー エラーはありません。
Bar()
メソッドを呼び出して定義しないとすぐに、リンカー エラーが発生します。その後、参照するBar()
と、リンカーはそれを解決できないためです。
Foo::Bar への未解決の参照がなく、その定義が必要ないため、これはリンクします。f.bar() などの呼び出しを実際に行おうとすると、エラーが発生します。