سؤال

تحاول الاستدعاء hi أو std::move ينتج عن ذلك:

/tmp/cch3DRvH.o: In function `main':

main.cpp:(.text.startup+0x5): undefined reference to `hi(int, char**)'

collect2: error: ld returned 1 exit status
#include <type_traits>
#include <utility>
#include <iostream>
#include <typeinfo>
#include <functional>

int main(int argc, char* argv[])
{
    decltype(main) hi;
    decltype(main) hi2;
    // std::function<int(int, char**)> hi2 = std::move(hi);
    // hi(argc, argv);
    std::cout << std::boolalpha;
    std::cout << std::is_same<decltype(main), decltype(hi)>::value << std::endl;
    std::cout << std::is_function<decltype(main)>::value << std::endl;
    std::cout << std::is_function<decltype(hi)>::value << std::endl;
    std::cout << std::is_same<decltype(std::move(main)), decltype(std::move(hi))>::value << std::endl;
    std::cout << std::is_same<decltype(hi2), decltype(hi)>::value << std::endl;
    return 0;
}

انتاج:

main.cpp: In function ‘int main(int, char**)’:
main.cpp:16:54: warning: ISO C++ forbids taking address of function ‘::main’ [-Wpedantic]
     std::cout << std::is_same<decltype(std::move(main)), decltype(std::move(hi))>::value << std::endl;
main.cpp:16:54: warning: ISO C++ forbids taking address of function ‘::main’ [-Wpedantic]
true
true
true
true
true

يبدو hi تقريبا مثل main إلا أنه لا يعطي تحذيرات مثل عند الاستخدام std::cout << hi. هل من الممكن الحصول على هذا البرنامج لعدم الإخراج undefined reference toمرحبًا (int ، char **) ''؟

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

المحلول

decltype(main) هو الاسم المستعار للنوع int(int, char **). لقد أعلنت وظيفة hi مع هذا النوع ولكن لم يحدده.

للتخلص من undefined reference خطأ ، فقط حدد الوظيفة:

int hi( int, char ** ) {
    return 0;
}

الرسائل التي تظهر من قبل true لا يتم إخراجها من البرنامج ولكن من المترجم.

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