#function #static #call #external #member
#функция #статический #вызов #внешний #Участник
Вопрос:
У меня этот класс определен в 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. Не могли бы вы вставить более релевантный код? Из вашего описания трудно представить, в чем может заключаться проблема. Например, не похоже, что «Global::IntToStr(int num) { …» должен компилироваться.
2. Ваше определение, в Global.cpp отсутствует возвращаемое значение. Это то, как написан код, или просто опечатка в вопросе?
3. Как вы компилируете?
gcc SubMove.cpp
? Вам необходимо включить оба cpp-файла.
Ответ №1:
Для начала попробуйте это:
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 в вашем проекте, являющемся глобальным, включите заголовок 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) и разрешать все внешние файлы.
Комментарии:
1. Я просто немного исправил эту ошибку, потому что у меня было перечисление в качестве возвращаемого типа, и я продолжал думать, что я правильно объявил метод by в файле cpp; Это бы очень помогло, если бы вы «выделили» строку в возвращаемом типе : ).