关于C ++中的头文件创建错误

时间:2014-02-12 07:12:42

标签: c++ windows visual-studio-2010

我正在为.cpp文件创建头文件,它只包含函数的声明或原型

这是我写的三个节目   1.header.h文件//我已声明函数add()和sub(

 #ifndef HEADER_H
 #define HEADER_H
 #pragma once
 int s;
 int add(int a,int b);
 int sub(int a,int b);
 #endif

2.header.cpp,其中我定义了函数add()和sub(

 #include<iostream>
 #include "header.h"
 using namespace std;


int add(int a,int b){
s=10;   
int c=a+b+s;
return c;
}

 int sub(int a,int b){
 int c=a-b;
 return c;
 }    

3.example.cpp

     #include<iostream>
     #include"header.h"
     using namespace std;
      void main(){

    int a=10,b=20;

    int c=add(a,b);
    int d=sub(c,a);

    cout<<"c"<<c;
    cout<<"d"<<d;

    //cout<<s;
    getchar();
      }

这里,我在header.h中声明变量's'并在header.cpp文件中定义,该文件作为example.cpp文件输出中变量c的补充而给出。

显示错误 header.obj:错误LNK2005:“int s”(?s @@ 3HA)已在example.obj中定义 Projects \ header \ Debug \ header.exe:致命错误LNK1169:找到一个或多个多重定义的符号  请帮我解决这个错误,我很长时间没有这个...提前谢谢

1 个答案:

答案 0 :(得分:1)

您收到错误,因为.h中的这一行已经是定义

int s;

你需要在标题中有这个:

extern int s;

然后在一个.cpp文件中,通常是一个与.h文件具有相同基本文件名的文件,你需要有这样的定义:

int s;

相关:您不需要带有函数声明的extern关键字,因为它们只是声明,告诉编译器这样的函数存在于某个地方,并且您可以根据需要多次执行此操作。但是,如果您将全局(非static,非 - inline)函数定义(使用{}函数体而不是;)放入一个.h文件,你会得到关于多个定义的类似链接器错误。