关于inline函数的调用解决思路
关于inline函数的调用
情况1
//A.h
class A
{
public:
void Foo(int x, int y);
}
//A.cpp
inline void A::Foo(int x, int y)
{
…
}
//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}
//////////////////////////////////////////////////////////////
情况2
如下可以正确编译,也就是说把Foo函数的定义放到了A.h中
//A.h
class A
{
public:
void Foo(int x, int y);
}
inline void A::Foo(int x, int y)
{
…
}
//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}
如下是我的理解:当把某一函数声明为inline的话,在调用处必须可以找到函数的实现,这样感觉结构很不好,能否像一般函数那样,把inline函数也分成.h和.cpp文件呢?
如上,不知道说清楚了吗,哪里不请指出
------解决方案--------------------
inline 函数一般必须在头文件内,因为大多数构建环境在编译期间进行 inline 化。为了用被调用函数的函数本体替换一个函数调用,编译器必须知道函数看起来像什么样子
(有一些构建环境可以在连接期间进行 inline 化,还有少数几个——比如,基于 .NET Common Language Infrastructure (CLI) 的控制环境——居然能在运行时 inline 化。然而,这些环境都是例外,并非规则。inline 化在大多数 C++ 程序中是一个编译时行为。)
http://dev.yesky.com/260/2095260.shtml
------解决方案--------------------
不准确,应该是: 只要不是在一个模块里调用就需要把定义放在头文件里面
这主要是针对一个类的实现体可能分散在不同cpp的情况
------解决方案--------------------
这是c++标准,不过没有理由说不能其它方式做,只要编译器支持。
情况1
//A.h
class A
{
public:
void Foo(int x, int y);
}
//A.cpp
inline void A::Foo(int x, int y)
{
…
}
//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}
//////////////////////////////////////////////////////////////
情况2
如下可以正确编译,也就是说把Foo函数的定义放到了A.h中
//A.h
class A
{
public:
void Foo(int x, int y);
}
inline void A::Foo(int x, int y)
{
…
}
//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}
如下是我的理解:当把某一函数声明为inline的话,在调用处必须可以找到函数的实现,这样感觉结构很不好,能否像一般函数那样,把inline函数也分成.h和.cpp文件呢?
如上,不知道说清楚了吗,哪里不请指出
------解决方案--------------------
inline 函数一般必须在头文件内,因为大多数构建环境在编译期间进行 inline 化。为了用被调用函数的函数本体替换一个函数调用,编译器必须知道函数看起来像什么样子
(有一些构建环境可以在连接期间进行 inline 化,还有少数几个——比如,基于 .NET Common Language Infrastructure (CLI) 的控制环境——居然能在运行时 inline 化。然而,这些环境都是例外,并非规则。inline 化在大多数 C++ 程序中是一个编译时行为。)
http://dev.yesky.com/260/2095260.shtml
------解决方案--------------------
不准确,应该是: 只要不是在一个模块里调用就需要把定义放在头文件里面
这主要是针对一个类的实现体可能分散在不同cpp的情况
------解决方案--------------------
这是c++标准,不过没有理由说不能其它方式做,只要编译器支持。