سؤال

حسنا،

وهنا هو ما أحاول القيام به ... والآن هو تجميع لكنه فشل في ربط ... LNK2001

وأريد الطرق ساكنة بسبب عدم وجود متغيرات الخاصة بالأعضاء، ولكن أنا أيضا أريد لهم مضمنة لspeedups التي يقدمونها.

ما هي أفضل طريقة للقيام بذلك؟ هنا هو ما قلته في وباختصار يمكن القول:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

وأنا أحاول أن تفعل هذا لأنني أريد أن يكون قادرا على الذهاب:

foo::bar(myFloatPtr);

وليس لديها فو أية متغيرات العضو ... فإنه لا معنى ل.

هل كانت مفيدة؟

المحلول

إذا كنت تتصل شريط من ملف حزب الشعب الكمبودي آخر، بخلاف foo.cpp، فإنه يجب أن يكون في ملف الرأس.

نصائح أخرى

أولا، أود أن وضعها في namespace بدلا من ذلك، لأنه لا يوجد منطق على الإطلاق في أن "class". ثانيا، قد تحدد الجسم وظائف في ملف الرأس مباشرة للسماح للمترجم لرؤيتهم. خلاف ذلك، تحتاج whole program optimization أن يقوم به رابط لرمز مصدر تلك الوظائف (AFAIK).

ويجب تعريف دالة مضمنة الخاص بك في ملف الرأس، وليس ملف تطبيق منفصل. وهناك حاجة إلى تعريفات عند #included ملف الرأس، إذا أعربوا عن أملهم في أن inlined، بعد كل شيء.

والفشل الرابط الذي نشهد هو لأن الإعلان (في ملف الرأس) لا إعلام المترجم أن هذه الطريقة أن تكون مضمنة، في حين أن التنفيذ هو مضمنة، لذلك لا تتوفر للربط.

وتنفذ

وظائف عموما، مضمنة قادرا حيث يتم الإعلان عنها (في ملف الرأس). مترجم حر في مضمنة وظائف لديك لهم، ولكن لا يمكنك <م> القوة إلى مضمنة أي شيء. إذا كنت تستخدم Visual C ++، تمكين "مضمنة أي مناسبة"، "الجيل رمز وقت الارتباط" و "صالح كود سريع".

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