سؤال
حسنا،
وهنا هو ما أحاول القيام به ... والآن هو تجميع لكنه فشل في ربط ... 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 ++، تمكين "مضمنة أي مناسبة"، "الجيل رمز وقت الارتباط" و "صالح كود سريع".