Ниже приведена упрощенная версия кода, который я написал. пока этот код работает нормально
class.h
namespace myNamespace
{
class myClass
{
public:
myClass(unsigned width, unsigned height);
myClass(OtherClass& other, unsigned width, unsigned height);
~myClass(){};
private:
unsigned width;
unsigned height;
};
}
class.cpp
#include "class.h"
namespace myNamespace
{
myClass::myClass(unsigned width, unsigned height)
{
//code
}
myClass::myClass(OtherClass& other, unsigned width, unsigned height) : myClass(width, height)
{
//code
}
}
(OtherClass определен в другом месте внутри myNamespace и включен)
конструктор, который использует OtherClass, не изменяет другие, поэтому было бы целесообразно сделать его const.
Но когда я изменяю конструктор в .cpp и .h, чтобы использовать const OtherClass&
это дает мне ошибку:
ошибка LNK2019: неразрешенный внешний символ «public: __thiscall
myNamespace :: myClass :: myClass (класс myNamespace :: OtherClass &без знака
int, unsigned int) «(?? 0CarbonMatrix @ молекулы @@ QAE @ AAVCarbonString @ 1 @ II @ Z), на которые есть ссылки в
функция _wmain путь \ main.obj
Насколько я знаю, const не должен вызывать эту ошибку, если вы используете их как в объявлении, так и в определении.
Итак, мой вопрос: что идет не так и как это исправить?
Эта ошибка указывает на то, что вы фактически не изменили объявление в заголовочном файле или не перекомпилировали все исходные файлы после его изменения.
Дважды проверьте, что вы действительно изменили его на const OtherClass&
в заголовочном файле. Затем пересоберите все проект, то есть не только class.cpp, но и main.cpp.
Других решений пока нет …