Я создаю файл заголовок для CPP-файл, в котором она будет содержать только заявление или прототип функцииО Заголовочном файле СОЗДАНИЕ ОШИБКИ В C++
здесь является тройки программы я написал 1.header.h файл // где я объявившие функции добавления (,) и к югу (,)
#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, где я определил функции добавления (,) и к югу (,)
#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 файле, который определяется как дополнение к переменной с в example.cpp вывод файла.
он показывает ошибку header.obj: ошибка LNK2005: "Int S" (? S @@ 3HA) уже определен в example.obj Проекты \ заголовок \ Debug \ header.exe: фатальная ошибка LNK1169: один или более умножить определенные символы нашли пожалуйста, помогите мне решить эту ошибку, я работаю с давно за это ... заранее спасибо
Если вы используете include guard #define, я думаю, что нет смысла помещать '#pragma once' внутри них ... – hyde
, но я прочитал в Интернете, что использование #pragma будет использоваться для оптимизации выполнения кода, что добавлено yi , u означает, что я могу писать, # ifndef #pragma ..endif, правильно? – Santhosh
Нет, '# ifndef' и' # define' идут вместе, как и у вас. «#pragma once» является нестандартизированной * альтернативой * к этому и может сократить время компиляции для некоторых компиляторов. Это никак не влияет на выполнение кода. Вероятно, вы должны поместить его вне [include guardings] (http://en.wikipedia.org/wiki/Include_guard) или вообще не использовать его. – hyde