Неразрешенные внешние ссылки на C++, конструктор по умолчанию
Я работаю над консольным приложением VS2010C++ и создал класс Manager, который содержит статические и динамические объекты одного типа (Thing), один из которых является вектором.
Первоначально я получил сообщение об ошибке в конструкторе класса менеджера, в котором говорилось, что класс, из которого он состоит, не имеет конструктора по умолчанию (но у него не должно быть конструктора по умолчанию, поскольку объекты должны быть созданы во время выполнения и с введением времени выполнения информация) Я закончил тем, что создал конструктор по умолчанию для удерживаемого класса (который ничего не делает), а затем я смог продолжить после этого.
затем я закончил со всеми функциями, которые мне нужны для программы, и я получил целую кучу LNK2019 "кое-что о неразрешенном внешнем символе MethodA, указанном в функции B.
Во-первых, зачем мне нужен конструктор по умолчанию для управляемого класса, если он мне нужен во время выполнения?
во-вторых, как мне избавиться от этих LNK2019? (все эти методы помечены как встроенные в заголовках, и это единственные ссылки на класс менеджера или из него, и нет именных конфликтов.) В качестве небольшой заметки она может иметь какое-то отношение к необходимости смешивать модификаторы доступа. (для статических элементов) и -> (для динамических элементов)?
Редактировать: удалось избавиться от конструктора по умолчанию, ограничив его потребность в одном методе и изменив другие статические параметры на динамические.
за ошибку компоновщика: в Thing.h
class Thing{
public : int ** Array;
public : int size;
public : Point pi;
public : SinglyLinkedList * moves;
...
public :inline bool operator==(const Thing * _thing);
...
};
Thing.cpp
bool Thing::operator==(const Thing * _Thing){
for(int ii = 0; ii < m; ii++){
for(int jj = 0; jj < m; jj++){
if(Array[ii][jj] != _Thing->Array[ii][jj]){
return false;
}
}
}
return true;
}
ThingMgr.h
class ThingMgr {
public : Thing * control;
public : Thing * Current;
public : Thing * previous;
public : int size;
main.cpp
int _tmain{
...
ThingMgr * TestTings= new ThingMgr(num);
...
if(testThings->control->operator==(testThings->Current)){ // pretty sure its here as it is not called anywhere else in the function.
...
}
ошибка
1>Project_1.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Thing::operator==(class Thing const *)" (??8Board@@QAE_NPBV0@@Z) referenced in function _wmain
Я подумал, что, возможно, нужно было поставить круглые скобки, но потом VS закричал, ожидая члена. Есть и другие функции, но, может быть, если я смогу понять, что здесь происходит, то это должно быть исправлено.
1 ответ
Это помогло бы увидеть код. Из звуков этого вы создаете std::vector<T>
с типом, который имеет ненулевой размер: std::vector<T>
необходимо инициализировать объекты, и вы, очевидно, не дали ему объект, который он мог бы скопировать. Возможно, вы захотите создать пустой std::vector<T>
и использовать push_back()
ваши готовые объекты (или emplace()
их, если у вас есть система C++2011)
Что касается ошибок ссылок: вы, очевидно, не определили некоторые функции, которые вы используете. Что это точно, невозможно сказать с помощью смутного описания, которое вы дали. Вам нужно будет предоставить более подробную информацию, например, точную ошибку ссылки вместе с предполагаемой реализацией.