C ++ Вызов статической функции-члена из внешнего файла - PullRequest
0 голосов
/ 05 июня 2011

У меня есть этот класс, определенный в Global.h

    class Global
    {
     public:
         static string InttoStr(int num);
    };

В Global.cpp у меня есть

    Global::InttoStr(int num)
    {
        //Code To convert integer into string.
    }

Теперь из SubMove.cpp, когда я вызываю Global :: InttoStr (num), я получаю следующую ошибку:

ошибка LNK2019: неразрешенный внешний символ Global :: InttoStr (int), на который ссылается функция SubMove :: toString (void)

Затем я сделал функцию нестатичной и назвал ее так:

      Global g;
      g.InttoStr(num);

Но ошибка все еще сохраняется.

Я думал, что это как-то связано с extern, и искал его, но не мог установить связь. Пожалуйста, помогите.

1 Ответ

2 голосов
/ 27 декабря 2011

Прежде всего, попробуйте это:

string Global::InttoStr(int num)
{
    //Code To convert integer into string.
}

Кроме того, вы вызываете InttoStr из другой библиотеки?Если это так, вам нужно будет экспортировать класс «Global».

Рекомендуется использовать заголовок lib (в приведенном ниже примере замените LIB_ именем библиотеки):

#ifndef SOME_LIB_HEADER
#define SOME_LIB_HEADER

#if defined (LIB_EXPORTS)
    #define LIB_API __declspec(dllexport)
#else
    #define LIB_API __declspec(dllimport)

#endif // SOME_LIB_HEADER

Определите LIB_EXPORTS в вашем проекте, относящемся к Global, включите заголовок lib в Global.h, затем определите класс следующим образом

class LIB_API Global
{
    // some code for the class definition
};

Каждый проект должен иметь свои собственные определения LIB_EXPORTS и LIB_API, например DLL1_EXPORTS, DLL1_API,DLL2_EXPORTS, DLL2_API и т. Д.

По существу, это позволяет отдельной библиотеке обрабатывать предыдущую DLL с помощью __declspec (dllimport) и разрешать все внешние значения.

...