这算不算重复包含?该如何处理

这算不算重复包含?
test.cpp
内容:
#include<stdio.h>
    int a=10;
int b=20;
int c;

void add()
{
   c=a+b;

printf("%d",c);
}

head.h
内容:

void add();
#include"test.cpp"

helloworld.cpp
内容:
#include<stdio.h>
#include"head.h"
void main()
{
add();
getchar();

}

错误显示:1>  helloworld.cpp
1>test.obj : error LNK2005: "void __cdecl add(void)" (?add@@YAXXZ) 已经在 helloworld.obj 中定义
1>test.obj : error LNK2005: "int c" (?c@@3HA) 已经在 helloworld.obj 中定义
1>test.obj : error LNK2005: "int a" (?a@@3HA) 已经在 helloworld.obj 中定义
1>test.obj : error LNK2005: "int b" (?b@@3HA) 已经在 helloworld.obj 中定义

刚学C语言,上面的代码事看
伊成老师的视频照抄下来的 为什么他的可以运行 我的不行 我用的是vs2010 专业版
------解决思路----------------------
包含源文件是比较少见的情况, 一般是处理内联, 模板等情况, 这种情况为了避免一些问题会将
后缀名改为inc等后缀, vs是个傻瓜式的IDE, 默认会将所有源文件进行编译.