1

Lib1.a:

#include<stdio.h>
#include<stdlib.h>
class Lib
{
public:
inline static const void Test()
{
printf("this is lib1\n");
};
void Lib1Test()
{
Lib::Test();
}
};

Lib2.a:

#include<stdio.h>
#include<stdlib.h>
class Lib
{
public:
inline static const int Test()
{
printf("this is lib2\n");
};
void Lib2Test()
{
Lib::Test(); // this will call the Test in Lib1,amazing!
}
};

lib1.a と lib2.a は、一緒にテストするためにリンクされます。

どういう理由ですか?Lib::Test は再定義しませんでしたか?

4

2 に答える 2

2

これは 1 つの定義規則に違反しているため、プログラムは無効になりますが、実装で診断する必要はありません。

于 2012-05-25T02:46:17.750 に答える
1

Lib::Test は再定義しませんでした

dribeas が既に回答したように、プログラムの形式が正しくありません (1 つの定義規則に違反しています)。

リンクに失敗しない理由を理解するには、こちらCOMDATのセクションについてお読みください。

于 2012-05-25T03:18:52.697 に答える