我正在为.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:找到一个或多个多重定义的符号 请帮我解决这个错误,我很长时间没有这个...提前谢谢
答案 0 :(得分:1)
您收到错误,因为.h中的这一行已经是定义:
int s;
你需要在标题中有这个:
extern int s;
然后在一个.cpp文件中,通常是一个与.h文件具有相同基本文件名的文件,你需要有这样的定义:
int s;
相关:您不需要带有函数声明的extern
关键字,因为它们只是声明,告诉编译器这样的函数存在于某个地方,并且您可以根据需要多次执行此操作。但是,如果您将全局(非static
,非 - inline
)函数定义(使用{}
函数体而不是;
)放入一个.h文件,你会得到关于多个定义的类似链接器错误。