9

わかった、

これが私がやろうとしていることです...今はコンパイルしていますが、リンクに失敗しています... LNK2001

メンバー変数がないため、メソッドを静的にしたいのですが、メソッドが提供する高速化のためにメソッドをインライン化することも必要です。

これを行う最善の方法は何ですか?一言で言えば、これが私が持っているものです:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

私は行くことができるようにしたいので、私はこれをやろうとしています:

foo::bar(myFloatPtr);

foo にはメンバー変数がありません...意味がありません。

4

4 に答える 4

10

foo.cpp 以外の別の cpp ファイルから bar を呼び出す場合は、ヘッダー ファイルにある必要があります。

于 2009-10-27T00:57:10.060 に答える
4

まず、namespace代わりに a に配置します。これにはロジックがまったくないためです"class"。次に、関数本体をヘッダー ファイルで直接定義して、コンパイラが参照できるようにすることができます。それ以外の場合は、whole program optimizationこれらの関数をインライン化するためにリンカーが行う必要があります(AFAIK)。

于 2009-10-27T00:58:46.923 に答える
3

個別の実装ファイルではなく、ヘッダー ファイルでインライン関数を定義する必要があります。ヘッダー ファイルが #include されている場合、インライン化する必要がある場合は、これらの定義が必要です。

表示されているリンクの失敗は、(ヘッダー ファイル内の) 宣言がメソッドをインラインにすることをコンパイラに通知しないのに対し、実装はインラインであるため、リンクに使用できないためです。

于 2009-10-27T00:56:16.683 に答える
1

通常、インライン化可能な関数は、宣言されている場所 (ヘッダー ファイル内) に実装されます。コンパイラは、関数を自由にインライン化できますが、強制的にインライン化することはできません。Visual C++ を使用している場合は、「任意の適切なインライン化」、「リンク時のコード生成」、および「高速コードを優先」を有効にします。

于 2009-10-27T01:00:59.163 に答える