Sunday, 15 April 2012

C++ multiple definition errors in 3-way header include -


मेरे पास 3 हैडर फाइल ऑब्जेक्ट्स को परिभाषित करती है:

Point3d.h

 < कोड> #ifndef POINT3D_H # परिभाषित POINT3D_H वर्ग Ray3d; वर्ग वेक्टर 3 डी; #include "Ray3d.h" #include "Vector3d.h" वर्ग Point3d {...}; #endif  

Vector3d.h

  #ifndef VECTOR3D_H # परिभाषित VECTOR3D_H वर्ग पॉइंट 3 डी; वर्ग रे 3 डी; #include "Ray3d.h" #include "Point3d.h" वर्ग Vector3d {...}; #endif  

और Ray3d.h

  #ifndef RAY3D_H # रेडेड 3 डी परिभाषित करें; वर्ग वेक्टर 3 डी; #include "point3d.h" #include "Vector3d.h" वर्ग Ray3d {...}; # सीडीएफ़  

मैं। सीपीपी फाइलों को शामिल नहीं करूँगा, लेकिन सभी कार्यों को वहां परिभाषित किया गया है।

और फिर मेरे पास यह वर्ग है: Transform.h

<पूर्व> #ifndef TRANSFORM_H # परिभाषित TRANSFORM_H #include & lt; Eigen / Dense & gt; #include "../../geometry/Ray3d.cpp" #include "../../geometry/Point3d.cpp" #include "../../geometry/Vector3d.cpp" Eigen :: MatrixXd का उपयोग करना ; कक्षा परिवर्तन {...}; #endif

और अंत में मेरे पास यह उपवर्ग है: Translation.h

  #ifndef TRANSLATION_H # परिभाषित TRANSLATION_H // # शामिल & lt; Eigen / Dense & gt; #include "Transform.h" // # शामिल करें "../../geometry/Point3d.cpp" // # शामिल करें "../../geometry/Vector3d.cpp" // # शामिल "../। ./geometry/Ray3d.cpp "Eigen :: MatrixXd का उपयोग कर; कक्षा अनुवाद: सार्वजनिक रूपांतरण {...}; #endif  

समस्या तब होती है जब मैं संकलित करने की कोशिश करता हूँ Translation.cpp:

  g ++ Transform.cpp Translation.cpp  

मुझे Ray3d, Point3d, और Vector3d में प्रत्येक विधि के लिए फ़ंक्शन त्रुटि की एक बहुत अधिक परिभाषा मिलती है। इस से बचने के लिए मैं क्या कर सकता हूं? क्या मुझे कम शामिल होना चाहिए? क्या मेरी जी ++ कमान गलत है? धन्यवाद!

मुझे पता है कि मैं दोनों अग्रेषण घोषणा कर रहा हूं और पहले 3 शीर्षकों में शामिल हूं, लेकिन यही एकमात्र तरीका है कि मैं उन्हें संकलित करने के लिए मिल सकता था। समस्या का हिस्सा हो सकता है?

आपको सीपीपी फ़ाइलों को ट्रांसफार्म में शामिल नहीं करना चाहिए।


2 comments: