برامج يجمع في غرام ++ لكن يخرج مع أخطاء رابط في دول مجلس التعاون الخليجي
سؤال
وأنا أحاول الخروج في حل لو<لأ href =" https://stackoverflow.com/questions/1162401/is-it-possible-to-access-values-of-non-type -template المعلمات في والمتخصصة الشركة المصرية للاتصالات "> سؤال حول الطبقات قالب المتخصصة .
وهذا الرمز مع يجمع ما يرام في غرام ++، ولكن تبرزها أخطاء رابط عند التحويل البرمجي مع دول مجلس التعاون الخليجي. ما هو سبب هذه الأخطاء؟
$ g++ traits2.cpp
$ gcc traits2.cpp
/tmp/ccI7CNCY.o: In function `__static_initialization_and_destruction_0(int, int)':
traits2.cpp:(.text+0x36): undefined reference to `std::ios_base::Init::Init()'
traits2.cpp:(.text+0x3b): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccI7CNCY.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
وملف traits2.ccp يحتوي على المذكور <لأ href = "https://stackoverflow.com/questions/1162401/is-it-possible-to-access-values-of-non-type-template-parameters- في الشركة المصرية للاتصالات المتخصصة / 1162910 # 1162910 "> حل باستخدام وظيفة emtpy الرئيسية ():
#include <iostream>
using namespace std;
// A default Traits class has no information
template<class T> struct Traits
{
};
// A convenient way to get the Traits of the type of a given value without
// having to explicitly write out the type
template<typename T> Traits<T> GetTraits(const T&)
{
return Traits<T>();
}
template <int major, int minor> struct A
{
void f()
{
cout << major << endl;
}
};
// Specialisation of the traits for any A<int, int>
template<int N1, int N2> struct Traits<A<N1, N2> >
{
enum { major = N1, minor = N2 };
};
template <> struct A<4,0>
{
void f()
{
cout << "Specialized:" << GetTraits(*this).major << endl;
}
};
int main(int argc, char * argv[] )
{
/*
A<4,0> p;
A<1,2> p2;
p.f();
p2.f();
*/
return 1;
}
المحلول
عند ترجمة مع دول مجلس التعاون الخليجي، لا ترتبط المكتبات C ++ في افتراضيا. بناء دائما كود C ++ مع g ++.
نصائح أخرى
إذا كنت تريد أن ترى الفرق بنفسك، حاول كلا الإصدارين مع العلم -v
$ g++ -v traits2.cpp
$ gcc -v traits2.cpp
وهذا سوف تظهر لك كل خطوة من الخطوات من التعليمات البرمجية أعلى للتنفيذ، بما في ذلك المكتبات التي تمت إضافتها.
والتعليمات البرمجية الخاصة بك هو C ++، لذلك يجب أن يكون ترجمة مع g ++، وC ++ مترجم، وليس دول مجلس التعاون الخليجي، ومترجم C.