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

如果您从另一个 cpp 文件(而不是 foo.cpp)调用 bar,则它需要位于头文件中。

于 2009-10-27T00:57:10.060 回答
4

首先,我会将它们放在 a 中namespace,因为它根本没有逻辑"class"。其次,您可以直接在头文件中定义函数体,以便编译器看到它们。否则,您需要whole program optimization由链接器完成内联这些函数(AFAIK)。

于 2009-10-27T00:58:46.923 回答
3

您必须在头文件中定义您的内联函数,而不是单独的实现文件。毕竟,当头文件被#included 时,如果希望它们被内联,则需要这些定义。

您看到的链接失败是因为声明(在头文件中)没有通知编译器该方法是内联的,而实现是内联的,因此不能用于链接。

于 2009-10-27T00:56:16.683 回答
1

通常可内联函数在声明它们的地方(在头文件中)实现。编译器可以自由地内联你拥有的函数,但你不能强迫它内联任何东西。如果您使用的是 Visual C++,请启用“内联任何合适的”、“链接时代码生成”和“喜欢快速代码”。

于 2009-10-27T01:00:59.163 回答