读书人

关于成员函数内联的有关问题

发布时间: 2012-02-09 18:22:27 作者: rapoo

关于成员函数内联的问题
写代码如下:
//Tesh.h
class A{
public:
void Foo(int x, int y);
};

//Test.cpp
#include "Test.h "
#include <iostream>
using namespace std;

inline void A::Foo( int x, int y )
{
cout < < x < < " " < <y < <endl;
}

//main.cpp
#include "Test.h "
int main()
{
A a;
a.Foo(1,2);
return 0;
}
使用visual c++2005 express编译器进行编译的,编译的时候没有错误,链接的时候就有了错误了,错误信息:
error LNK2019: 无法解析的外部符号 "public: void __thiscall A::Foo(int,int) " (?Foo@A@@QAEXHH@Z),该符号在函数 _main 中被引用

如果在函数定义的时候不用inline,就没有问题了,请问一下为什么会出现问题呢?




[解决办法]
inline的函数必须放在.h里,你的C++书没讲过吗?
[解决办法]
把定义放在.h里

要不就不要inline
[解决办法]
inline 定义需要和它的声明放一起
[解决办法]
对于内联函数,编译器需要在调用点将其展开,所以对于头文件来说这个函数必须是可见的,不然编译器就不知道怎么去展开这个函数了。

所以inline函数应该定义在头文件里面
[解决办法]
如果真想inline,干脆把实现扔class里吧
[解决办法]
对于内联函数,应该将函数的申明和定义分开。
在C++中有两种函数都应该是内联的。一种是类的成员函数,一种是显示定义的内联函数。
[解决办法]
更正。。
应该是类中定义的函数默认为内联的。
[解决办法]
内联函数的函数体紧跟在类方法声明之后,圆括号后面没有分号.
[解决办法]
inline的函数必须放在.h里
[解决办法]
1、使用关键字 inline , 在类体外定义

2、把定义写在类体内,就内联了

读书人网 >C++

热点推荐