سؤال

وأنا حول اللعب مع Box2D للمتعة في الوقت الراهن، وبعد الحصول على تعليق من بعض المفاهيم قررت أن تجعل اختبار بلدي للسرير اختبار (Box2D يأتي مع مجموعة من الأمثلة ولديه اختبار بسيط للتمديد فئة لإجراء الاختبارات الخاصة بك). لقد بدأت من خلال الاستيلاء على واحد من الاختبارات الأخرى، باقتلاع كل شيء ما عدا التواقيع وظيفة، وإدخال بعض من التعليمات البرمجية بلدي.

ولكن، ليس هناك #includes إلى أي من المكتبات Box2D بحيث أنها لا تجمع (ولكن فقط لي أخطاء الملف، إزالة ملف اختباري ويجمع ما يرام). وأنا أحسب أنني يجب أن يكون بطريق الخطأ حذف منها عندما كنت تتحرك الأشياء حولها، ولكن عند التدقيق في ملفات اختبارات أخرى لا يوجد في أي مكان #includes أن ينظر إليها. كل واحد من الملفات يستخدم datastructures والوظائف التي تم تعريفها في مختلف الملفات رأس Box2D. كيف هذا تجميع على الإطلاق؟

وعلى سبيل المثال، وهذا هو واحد من الاختبارات الجاهزة جردت من الجسم منشئ وبعض التعليقات في الجزء العلوي:

#ifndef CHAIN_H
#define CHAIN_H

class Chain : public Test
{
public:
    Chain()
    {
        // Since b2BodyDef isn't defined in this file, and no 
        // other files are included how does this even compile?
        b2BodyDef bd; 


        // rest of constructor...
    }

    static Test* Create()
    {
        return new Chain;
    }
};
#endif
هل كانت مفيدة؟

المحلول

ويحصل جمعت كل ملف حزب الشعب الكمبودي. قبل يتم ترجمة ذلك على الرغم من، يعمل المعالج. ويتناول preprocesser مع كل من الكلمات الرئيسية بدءا من رقم، مثل # تشمل. والمعالج يأخذ النص من أي # ملفات include'd ويستبدل # تتضمن جملة مع كامل النص في الملف التي اشتمل عليها. إذا تضمن ملف # include'd الملفات الأخرى، وجلب النص أيضا.

وبعد تشغيل المعالج، ينتهي بك الأمر مع ملف نصي كبيرة جدا تسمى وحدة الترجمة. هذا ما يحصل المترجمة.

وهكذا .. ربما كما قال أشخاص آخرين. يتضمن ملف حزب الشعب الكمبودي في مكان ما الاشياء Box2D قبل أن يشمل chain.h، بحيث يعمل كل شيء. غالبا ما يكون هناك خيار على المترجم أو إعدادات المشروع التي سوف تحصل على المعالج لإنشاء ملف مع كل من النص في وحدة الترجمة حتى تتمكن من رؤيتها. وهذا مفيد في بعض الأحيان لتعقب الأخطاء مع #includes أو وحدات الماكرو.

نصائح أخرى

ولعل رأس التي لا تعرف غير #included b2BodyDef في .CPP قبل هذا الرأس؟ ومن الواضح أن هناك رؤوس الأخرى المعنية، أو أنك لن تكون قادرا على الرجوع إلى فئة اختبار.

وو#ifndef CHAIN_H في بداية هو النمط الشائع الذي يشير لي أن هذا من ملف يسمى chain.h.

وليس المقصود

وملفات رأس مثل chain.h كنت نقلا عن أن يكون تحويل البرمجي قائمة بذاتها. الأرجح أنك بحاجة إلى إنشاء بسيط C ++ - الملف الذي يتضمن هذا والملفات الأخرى الضرورية قبل ذلك:

TEST.CPP:

#include "box2d.h"
#include "chain.h"

// more code here.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top