سؤال

لدي مشكلة مستنسخة على g++.VC++ لا يواجه أي مشاكل.لذلك لدي ملفين cpp:

1.CPP:

#include <string>
#include <iostream>

extern const std::string QWERTY;

int main()
{
    std::cout << QWERTY.c_str() << std::endl;

}

2.CPP:

#include <string>
const std::string QWERTY("qwerty");

لا يوجد سحر، أريد فقط وضع ثوابت السلسلة في ملف منفصل.في وقت الارتباط ld ينتج خطأ:"الإشارة غير المحددة إلى" _qwerty "" أول التفكير في التفاف كلتا الإعلانات في "extern" c "" - لم يساعد.الخطأ وغير c++ _QWERTY لا يزال موجودًا.

شكرا مقدما على أي اقتراحات

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

المحلول

يبدو أنك ربما تواجه هذا الجزء من المعيار:

في C ، يحتوي كائن مؤهل مؤهل في نطاق الملف دون وجود محدد فئة تخزين صريح على ارتباط خارجي. في C++، لديها ارتباط داخلي.

قم بإجراء هذا التغيير على 2.cpp:

#include <string>
extern const std::string QWERTY("qwerty");

هناك المزيد من التفاصيل حول معنى "الربط" في هذا السؤال - ما هو الارتباط الخارجي والربط الداخلي في C++.

نصائح أخرى

وأنا يجب أن ننظر إليه ولكن أعتقد المتغيرات العالمية CONST لها الربط الداخلي في C ++، لا تستخدم const وأنها سوف تجمع ما يرام.

1.cpp

...
extern std::string QWERTY;
...

2.cpp
#include <string>
std::string QWERTY("qwerty");

وأو هل يمكن أن يعلن / تعريف بأنها سلسلة CONST في رأس مشترك بطبيعة الحال.

سوف

وإضافة extern زائدة إلى 2.cpp الحصول عليه لتجميع جدا، لكنني لست متأكدا من أن هذا المعيار أو بعض ز ++ 'خارج'

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