Я создаю файл заголовка для.cpp файла, где он будет содержать только объявление или прототип функции
вот программы threes, которые я написал файл 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();
}
здесь я объявил переменную 's' в header.h и определен в файле header.cpp, который указан как дополнение к переменной c в файле example.cpp.
он показывает ошибку header.obj: ошибка LNK2005: "int s" (? s @@3HA), уже определенная в example.obj Projects\header\Debug\header.exe: фатальная ошибка LNK1169: обнаружен один или несколько размножаемых символов, пожалуйста, помогите я разрешаю эту ошибку, я работаю от долгого времени для этого... спасибо заранее
Вы получаете ошибку, потому что эта строка в.h уже является определением:
int s;
Вы должны иметь это в заголовке:
extern int s;
И затем в ровно один.cpp файл, обычно один с тем же именем базового файла, что и файл.h, вы должны иметь определение:
int s;
Связано: вам не нужно ключевое слово extern
с объявлениями функций, потому что это просто декларации, говорящие компилятору, что такая функция существует где-то, и вы можете делать это столько раз, сколько хотите. Но если вы поместите глобальное (non- static
, non- inline
) определение функции (с {}
тело функции вместо ;
) в.h файл, вы получите аналогичную ошибку компоновщика о нескольких определениях.
#pragma once
...