好,
以下是我正在尝试做的事情......现在它正在编译但未能链接...... 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没有任何成员变量......它没有意义。
答案 0 :(得分:10)
如果你从另一个cpp文件(foo.cpp除外)调用bar,它需要在头文件中。
答案 1 :(得分:5)
首先,我会将它们放在namespace
中,因为"class"
中根本没有逻辑。其次,您可以直接在头文件中定义函数体,以允许编译器查看它们。否则,链接器需要whole program optimization
来内联这些函数(AFAIK)。
答案 2 :(得分:3)
您必须在头文件中定义内联函数,而不是单独的实现文件。当头文件是#included时,如果希望它们被内联,那么这些定义是必需的。
您看到的链接失败是因为声明(在头文件中)没有通知编译器该方法是内联的,而实现是内联的,因此无法用于链接。
答案 3 :(得分:1)
通常可以在声明它们的位置(在头文件中)实现内联函数。编译器可以像你拥有的那样自由内联函数,但你不能强制它内联任何东西。如果您使用的是Visual C ++,请启用“内联任何合适的”,“链接时代码生成”和“支持快速代码”。