最初に私のコードのレイアウト:
ああ
class STORAGE_CLASS_DECLARATOR A : public PureVirtual
{
some member functions, all working;
void someFunctionCallingOperator<<();
friend std::ostream& operator << (std::ostream &, A *);
}
A.cpp
std::ostream& operator << (std::ostream & out, A * a){...}
void A::someFunctionCallingOperator<<(){...}
ここで、Storage_xxx_declarators は declspec のマクロです。宣言子の有無にかかわらず、フレンド関数を試してみましたが、役に立ちませんでした。
operator<< 関数で未解決の外部シンボルを取得します。
私の理解では、これは次のいずれかが原因である可能性があります。
- 関数の本体はありません。これは、ファイルが動作している他の関数に対して確実に解析されるため、明らかに真実ではありません。
- シンボルが正しくエクスポートされていません。繰り返しますが、私はこれがどのように起こっているのか途方に暮れており、実際のシナリオでは、ここで A の operator<< は実際に別のクラス B の operator<< を呼び出し、その関数にも同じエラーが表示されます。したがって、A の定義はある時点で解析されている必要があります。
リンクは別の段階であり、非常に単純なことを間違って行っているに違いないことを認識していますが、しばらく見つめていて、なぜこれが起こっているのかを理論的に推論できないので、SOに助けを求めています
ありがとう、AK