私が依存関係を挿入すると、それは共有ライブラリに定義されているクラスBのクラスAのインスタンスにします。共有ライブラリにはクラスAのオブジェクトファイルが必要ですか? (Meantはライブラリのコンパイル後のg ++リンケージ段階で、実行時のOSリンケージではありません)共有ライブラリの依存性注入は、libにオブジェクトファイルが必要ですか?
実際に私はこれをLinuxで試しましたが、実際には試していません。これはすべてのプラットフォームで当てはまりますか?
#ifndef SOME_HEADERB_H
#define SOME_HEADERB_H
class A;
struct B {
void whoopUsingA(A* a);
};
#endif
b.cpp
#include "b.h"
#include "a.h"
#include <iostream>
void B::whoopUsingA (A* a){
std::cout << "B whoops A."<< std::endl;
a->whoop();
}
b.h
a.h
#ifndef SOME_HEADERA_H
#define SOME_HEADERA_H
struct A{
void whoop();
};
#endif
a.cpp
#include <iostream>
#include "a.h"
void A::whoop(){
std::cout << "A whooped."<< std::endl;
}
を(必須でない限り、この場合、シンボルの可視性を無視)
main.cppに
#include "a.h"
#include "b.h"
int main (int argc, const char* argv[]) {
A a;
B b;
b.whoopUsingA(&a);
return 0;
}