पर फ़ंक्शन जोड़ने के बाद एकाधिक परिभाषा लिंकर त्रुटि तो मेरा प्रोग्राम ठीक काम कर रहा है। संकलन, लिंकिंग, चल रहा है, काम करता है। फिर, मैं इस तरह मेरी फ़ाइलों में से एक के लिए एक सरल समारोह को जोड़ने के लिए, तय:एक पूर्व लिंकिंग फ़ाइल
#ifndef UTILITY_HPP
#define UTILITY_HPP
/* #includes here. There's no circular include, I've checked. */
namespace yarl
{
namespace utility
{
(several function declarations and definitions)
bool isVowel(const char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
else return false;
}
}
}
#endif
कि समारोह परिभाषा केवल परिवर्तन मैं अपने कोड में किए गए है। बाकी सब कुछ वैसा ही है जैसा वह था। अभी तक कुछ भी नहीं कहता है। मैं संकलन, और यह ++ लिंक करने के लिए विफल रहता है, जी के साथ हर फ़ाइल है कि यह एक #includes के लिए इन त्रुटियों में से एक दे रही है:
./obj/Feature.o: In function `yarl::utility::isVowel(char)':
/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src/Utility.hpp:130: multiple definition of `yarl::utility::isVowel(char)'
./obj/Events.o:/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src /Utility.hpp:130: first defined here
./obj/GameData.o: In function `yarl::utility::isVowel(char)':
अगर मैं isVowel
बाहर टिप्पणी, यह फिर से काम करता है। मैंने इसे नाम बदलने की कोशिश की है, अभी भी काम नहीं करता है। मैंने इसे void randomFunctionName() {}
के साथ बदलने की कोशिश की है, अभी भी काम नहीं करता है। मैंने इसे गैर-इनलाइन बनाने और Utility.cpp में फ़ंक्शन बॉडी डालने का प्रयास किया है, फिर भी काम नहीं करता है। मैं बेहद उलझन में हूँ। एक साधारण फ़ंक्शन जोड़ने से लिंकर क्यों खराब हो जाएगा?
अगर आप 'के रूप में इनलाइन bool isVowel (स्थिरांक चार ग)' यह घोषित मतलब है, मैं करने की कोशिश की है कि, और कोई पासा। मैंने कार्यान्वयन फ़ाइल में परिभाषा डालने का भी प्रयास किया है, और अभी भी काम नहीं करता है। – Max
मान लीजिए कि आपने उन दो चीजों की कोशिश करते समय कोई गलती नहीं की है, तो हो सकता है कि आप डुप्लिकेट कर रहे हों। क्या आपने अपने सभी स्रोतों के माध्यम से वैश्विक खोज की है? – Cogwheel
स्क्रैच करें कि। यह पहले काम नहीं करता था क्योंकि जब मैंने इसे पुन: संकलित किया तो मेकफ़ाइल ने हेडर को दोबारा नहीं बनाया। सभी ऑब्जेक्ट फ़ाइलों को हटाने और पुन: संकलित करने से इनलाइन घोषणा को नोटिस किया गया। आपकी सहायता के लिए धन्यवाद. – Max