Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C+中定义内联自由函数(非成员函数)+;? 在C++中,我需要定义一些内联的一般函数。 然而,当我在头文件中编写原型,在.cpp文件中编写实现时,我遇到了“LNK2001未解析外部符号”错误_C++_Inline_Non Member Functions - Fatal编程技术网

如何在C+中定义内联自由函数(非成员函数)+;? 在C++中,我需要定义一些内联的一般函数。 然而,当我在头文件中编写原型,在.cpp文件中编写实现时,我遇到了“LNK2001未解析外部符号”错误

如何在C+中定义内联自由函数(非成员函数)+;? 在C++中,我需要定义一些内联的一般函数。 然而,当我在头文件中编写原型,在.cpp文件中编写实现时,我遇到了“LNK2001未解析外部符号”错误,c++,inline,non-member-functions,C++,Inline,Non Member Functions,是否要删除.cpp文件并在头文件中实现该功能 我试图定义一些可供其他类使用的共享非成员数学函数 头文件: .cpp文件 如果您希望函数是串联的,则必须在标题中提供定义。如果你有一个单独的cpp文件,它不会在一行。链接错误通常是由于链接阶段未包含cpp文件。如果希望函数联机,则必须在标题中提供定义。如果你有一个单独的cpp文件,它不会在一行。链接错误通常是由于链接阶段未包含cpp文件。内联说明符的名称有点误导,因为它建议函数内联。但是,代码>内联首先指定函数的链接(这也是编译器考虑内联的提示)。对

是否要删除.cpp文件并在头文件中实现该功能

我试图定义一些可供其他类使用的共享非成员数学函数

头文件:

.cpp文件


如果您希望函数是串联的,则必须在标题中提供定义。如果你有一个单独的cpp文件,它不会在一行。链接错误通常是由于链接阶段未包含cpp文件。

如果希望函数联机,则必须在标题中提供定义。如果你有一个单独的cpp文件,它不会在一行。链接错误通常是由于链接阶段未包含cpp文件。

内联说明符的名称有点误导,因为它建议函数内联。但是,<>代码>内联首先指定函数的<强>链接(这也是编译器考虑内联的提示)。对于声明为
inline
的函数,编译对象中不会生成可链接的符号

因此,
inline
函数只有在头文件中定义(而不仅仅是声明)时才有意义,头文件可能包含在许多编译单元中。
inline
说明符than防止编译器在相应的对象文件中发出此函数的多个(实际上是任何)符号

如果一个编译单元只需要一个小函数,那么不需要在其他任何地方声明它。此外,您不需要内联声明它,而是将它放在匿名名称空间中以防止它可见(在生成的对象文件中)

所以,要么(这很可能是您的用例)


inline
说明符的名称有点误导人,因为它表明函数是内联的。但是,<>代码>内联首先指定函数的<强>链接(这也是编译器考虑内联的提示)。对于声明为
inline
的函数,编译对象中不会生成可链接的符号

因此,
inline
函数只有在头文件中定义(而不仅仅是声明)时才有意义,头文件可能包含在许多编译单元中。
inline
说明符than防止编译器在相应的对象文件中发出此函数的多个(实际上是任何)符号

如果一个编译单元只需要一个小函数,那么不需要在其他任何地方声明它。此外,您不需要内联声明它,而是将它放在匿名名称空间中以防止它可见(在生成的对象文件中)

所以,要么(这很可能是您的用例)


请提供一个。这是一个链接问题。是的,内联函数应该在头文件中。(通常)不需要单独的原型和实现。我应该删除.cpp文件并在头文件中实现该功能吗?-是的,如果头文件中只有内联函数,则没有理由使用
cpp
文件。关于
inline
:。请提供。这是链接问题。是的,内联函数应该在头文件中。(通常)不需要单独的原型和实现。我应该删除.cpp文件并在头文件中实现该功能吗?-是的,如果头文件中只有内联函数,则没有理由使用
cpp
文件。关于
inline
:。
inline void foo()
{
    //some code
}
//nothing
// foo.hpp:
inline void foo(bar x) { /* ... */ }  // full definition

// application.cpp:
#include "header.hpp"

/* ... */ foo();
// application.cpp:
namespace {
    inline void foo(bar x)   // inline specifier redundant
    { /* ... */ }
}

/* ... */ foo();