Question

Essayer d'invoquer hi ou std::move en résulte ceci:

/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;
}

Production:

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

Il semble hi est presque le même que main Sauf qu'il ne donne pas des avertissements comme lors de l'utilisation std::cout << hi. Est-il possible d'amener ce programme à ne pas sortir undefined reference toSalut (int, char **) ''?

Était-ce utile?

La solution

decltype(main) est un alias pour le type int(int, char **). Vous avez déclaré une fonction hi avec ce type mais ne l'a pas défini.

Se débarrasser du undefined reference Erreur, définissez simplement la fonction:

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

Les messages qui apparaissent avant true ne sont pas sortis de votre programme mais du compilateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top