Линкер не может связать мое приложение (XXXX уже определено в XXXX.obj) - PullRequest
2 голосов
/ 17 февраля 2010

Когда я пытаюсь создать свое приложение, компоновщик выдает множество ошибок , например:

modlauch.obj: ошибка LNK2005: "public: виртуальный __thiscall lolbutton :: ~ lolbutton (аннулируются)» (?? 1lolbutton @@ UAE @ XZ) уже определено в lolbutton.obj

Я подозреваю, что это как-то связано с неправильно настроенным компилятором, но я не знаю, как это исправить. Мой класс включен только один раз, поэтому я не думаю, что он имеет какое-либо отношение к коду. Я попытался восстановить и очистить проект, но он не помог .

Может кто-нибудь предложить решение этой проблемы? Моя платформа Win32 (C ++) , и я использую MFC .

Ответы [ 4 ]

4 голосов
/ 17 февраля 2010

Вы получите ошибку компоновщика при написании класса следующим образом:

lolbutton.h:

class lolbutton {
public:
  virtual ~lolbutton();
};

lolbutton::~lolbutton() {
  // something...
}

Вы не получите его, когда напишите так:

class lolbutton {
public:
  virtual ~lolbutton()
  { 
     // inlined something...
  }
};

Исправьте ошибку компоновщика, переместив определение деструктора из файла .h в файл .cpp. Это гарантирует, что существует только одно определение деструктора.

2 голосов
/ 17 февраля 2010

случайно ли вы включаете файл lolbutton.h более одного раза? вот так:

//file: something.h
#include <lolbutton.h>
//... do code

//file: something_other.h
#include <lolbutton.h>

//file: main.cpp
#include <something.h>
#include <something_other.h>
1 голос
/ 17 февраля 2010

По предположению - не видя код - случайно ли вы поместили деструктор для lolbutton в заголовок, не объявив его inline? Из вашего описания это вероятный виновник, если вы столкнетесь с экземплярами деструктора в нескольких единицах перевода.

0 голосов
/ 17 февраля 2010

Я бы выбрал либо несколько включений lolbutton.h, поэтому мой комментарий об обёртывании содержимого в блок «if! Определенные someUUID» или, возможно, это может быть связано с использованием предварительно скомпилированных заголовков.

...