Что ж, я получаю ошибку компоновщика (неразрешенный внешний символ) при выполнении следующих действий:
-У меня есть класс "Object" - он определен в "object.h".
имеет конструктор, подобный: explicit Object(double x, /* lots more */);
в файле "object.cpp" Я хочу дать этому конструктору тело: Object::object(double x) : _x(x) {}
Это работает .. Однако, если я добавлю ключевое слово "inline" в файл "object.cpp":
inline Object::Object(double x) : _x(x) {}
внезапно появляется ошибка компоновщика! «ошибка LNK2019: неразрешенный внешний символ»
Почему? - это значит, что я не могу использовать встраивание с конструкторами?
РЕДАКТИРОВАТЬ: на самом деле я заметил, что это относится ко всем методам. Однако если я переместу все методы в заголовок object.h , он ДЕЙСТВУЕТ. Вы не можете встроить функцию извне файла заголовка, где определен объект?
EDIT2: хорошо, большое обновление, я решил создать быстрый тестовый пример:
main.cpp
#include "a.h"
int main ()
{
a t;
t.test(5);
return 0;
}
хиджры
class a {
public:
void test (int x);
};
a.cpp
#include <iostream>
#include "a.h"
inline void a::test(int x) {
std::cout << x << std::endl;
}
Это дает следующую ошибку:
main.obj: ошибка LNK2019: неразрешенный внешний символ «public: void __thiscall a :: test (int)» (? Test @ a @@ QAEXH @ Z), указанный в функции _main
Удаление ключевого слова "inline" заставляет программу работать. Как и при объединении "a.h" и "a.cpp" в 1 файл.
Я действительно не могу придумать больше информации, чтобы дать: /