मैं दो .cpp फ़ाइलों के बीच एक ही चर साझा करने की कोशिश कर रहा हूं, उनमें एक ही .h फ़ाइल शामिल है।स्रोत चर के बीच साझा वैश्विक चर के साथ समस्याएं (मैं गार्ड शामिल कर रहा हूं)
लेकिन मुझे त्रुटियों को जोड़ रहा है, मुझे बता रहा है कि मेरे पास कई परिभाषाएं हैं। जो मैं अजीब लगता है, के बाद से मैं गार्ड
//main.cpp
#include <cstdio>
#include "shared.h"
int main(){
shared_int = 5;
printVal();
return 0;
}
//shared.h
#ifndef INCLUDE_GUARD_H
#define INCLUDE_GUARD_H
#include <cstdio>
#include <cstdlib>
int shared_int;
int printVal();
#endif
//shared.cpp
#include <cstdio>
#include "shared.h"
int printVal(){
fprintf(stderr,"a: %d\n",shared_int);
return 0;
}
मैं
g++ shared.cpp -c;g++ main.cpp shared.o
shared.o:(.bss+0x0): multiple definition of `shared_int'
/tmp/cci8w8Am.o:(.bss+0x0): first defined here
collect2: ld returned 1 exit status
धन्यवाद
अद्यतन की तरह comping हूँ शामिल उपयोग कर रहा हूँ: 'निर्वासन' अभी भी काम नहीं करता है, लेकिन अब मैं एक अपरिभाषित संदर्भ प्राप्त करें ये अद्यतन फ़ाइलें
//shared.h
#ifndef INCLUDE_GUARD_H
#define INCLUDE_GUARD_H
#include <cstdio>
#include <cstdlib>
//extern "C" int shared_int;//i've tried both
extern int shared_int;
int printVal();
#endif
//shared.cpp
#include <cstdio>
#include "shared.h"
int printVal(){
fprintf(stderr,"a: %d\n",shared_int);
return 0;
}
//main.cpp
#include <cstdio>
#include "shared.h"
int main(){
int shared_int = 5;
printVal();
return 0;
}
यह मैं कैसे संकलन
g++ main.cpp shared.o
shared.o: In function `printVal()':
shared.cpp:(.text+0x6): undefined reference to `shared_int'
collect2: ld returned 1 exit status
जवाब पहले से ही ग्रेग द्वारा दिया जाता है, लेकिन एक घोषणा और एक परिभाषा के बीच अंतर को समझने के लिए सुनिश्चित करें। यह एक महत्वपूर्ण भेद है जो आपको संकलक के संदेशों को बेहतर ढंग से समझने में मदद करेगा, और कोड के समग्र अर्थपूर्ण। – Nick
आपका अपडेट किया गया कोड 'बाहरी "सी" 'जोड़ता है (जो कि मैंने अपने उत्तर में जो कुछ भी सुझाया है उससे काफी अलग है), और परिभाषा को बिल्कुल प्रस्तुत नहीं करता है। इसके बजाय मैंने अपने उत्तर में जो सुझाव दिया है उसका प्रयास करें। –
@ कुल हेविल। मैंने यह भी कोशिश की है, एक ही लिंकिंग त्रुटि।धन्यवाद – monkeyking