неразрешенные внешние ссылки на c ++, конструктор по умолчанию - PullRequest
0 голосов
/ 07 марта 2012

Я работаю над консольным приложением VS2010C ++ и создал класс Manager, который содержит статические и динамические объекты того же типа (Thing), один из которых является вектором.

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

затем я закончил со всеми функциями, которые мне нужны для программы, и я получил целую кучу LNK2019 "кое-что о неразрешенном внешнем символе MethodA, указанном в функции B.

сначала зачем мне нужен конструктор по умолчанию для управляемого класса, если он мне нужен во время выполнения?

секунда, как мне избавиться от этих LNK2019? (все эти методы помечены как встроенные в заголовках, и это единственные ссылки на класс менеджера или из него, и нет именных конфликтов.) В качестве небольшой заметки она может иметь какое-то отношение к необходимости смешивать модификаторы доступа. (для статических элементов) и -> (для динамических элементов)?

Edit: удалось избавиться от конструктора по умолчанию, ограничив его необходимость одним методом и изменив другие статические параметры на динамические

для ошибки компоновщика: в 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 Ответ

1 голос
/ 07 марта 2012

Это поможет увидеть код. Из его звуков вы создаете std::vector<T> с вашим типом, которому присваивается ненулевой размер: std::vector<T> необходимо инициализировать объекты, и вы, очевидно, не дали ему объект, который он мог бы скопировать. Возможно, вы захотите создать пустой std::vector<T> и использовать push_back() ваши готовые объекты (или emplace() их, если у вас есть система C ++ 2011)

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

...