类成员函数重复定义有关问题

类成员函数重复定义问题
如果在头文件中直接写类成员函数的实现会引起重复定义问题如
//test.h
class test
{
void fun();
}
void test::fun()
{
}
当一个以上的cpp文件包含上面的头文件就会有重复定义问题了

我想问的是为什么下面这种写法不会出现重复定义
//test.h
class test
{
void fun(){};//成员函数直接实现了
}
虽然不会出现错误,可是想知道这其中的原理,
为什么上面的写法会重复定义,下面的不会出现重复定义,
主要是想知道为什么下面的写法不出现错误???
难道说下面的写法类似于内联函数????

------解决方案--------------------
对, 在类体中定义的函数都会自动变成内联的.

------解决方案--------------------
inline函数
------解决方案--------------------
不管怎么样子,楼主,你都要记住{}代表控制生命周期的。

第一种情况重定义就是因为在.h中很多.cpp都要引用,等于出现多个void test::fun()
第二种情况由于void fun()在类{}之内,生命周期仅在test类中。

有 #pragma once 保证编译一次
------解决方案--------------------
1 头文件中写代码的时候 没有inline 和static的话,很容易出现连接错误。
2 类声明中写实现的函数 自动加上inline 了。
------解决方案--------------------
在类内部定义的话,一般默认为内联函数
还是把函数的定义放在CPP文件中比较好,然后对头文件进行宏控制 
#ifndef
#define
...
#endif