Неразрешенные внешние ссылки на 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)

Что касается ошибок ссылок: вы, очевидно, не определили некоторые функции, которые вы используете. Что это точно, невозможно сказать с помощью смутного описания, которое вы дали. Вам нужно будет предоставить более подробную информацию, например, точную ошибку ссылки вместе с предполагаемой реализацией.

Другие вопросы по тегам