, пожалуйста, помогите мне, у меня есть странная проблема, с которой я никак не могу разобраться.
Предпосылка: я использую Visual C ++ 2005 на Windows 7 x64, и я уверен, что мойкод не является ошибочным, потому что с g ++ под Linux он работает хорошо.
Я занимаюсь разработкой приложения, использующего статическую библиотеку, также разработанную мной.
На этапе соединения приложения яполучить две загадочные ошибки LNK2019.
Это заголовок одного из классов библиотеки:
namespace sulfur
{
class Quark
{
public:
... various methods
void addAccel(const Vec2 &a);
... various methods
private:
... various data
};
}
Очевидно, что в файле cpp я предоставляю реализацию addAccel с точно такой же сигнатурой.
Когда я пытаюсь связать приложение с библиотекой, обнаруживаются ВСЕ другие функции-члены, кроме addAccel.
Компоновщик ищет символ "? AddAccel @ Quark @@ QAEXABV? $ TemplateVec2 @ M @ Atlax @@@ Z "
в то время как в файле .lib есть (который я нашел с помощью dumpbin)"? AddAccel @ Quark @ серная @@ QAEXABV? $ TemplateVec2 @ M @ Atlax@@@ Z».Единственная разница здесь в том, что компоновщик ищет искаженное имя без части пространства имен, и я не знаю почему.
Я пытался изменить имя, положение, соглашение о вызовах и подпись метода, нобезрезультатно, всегда получаю одну и ту же ошибку.
Вторая ошибка очень похожа.У меня есть другой заголовок в библиотеке:
namespace sulfur
{
class Cluster
{
...
Quark *addQuark(sulfur::Feature feat, float x, float y, float m=0.1f, float aF=0.01f);
...
};
}
, и предоставляется правильный файл реализации.Как и раньше, все остальные методы связаны должным образом, но не addQuark.
Компоновщик ищет «? AddQuark @ Cluster @ серна @@ QAEPAVQuark @@ W4Feature @ 2 @ MMMM @ Z»
но в библиотеке есть "? addQuark @ Cluster @ серная @@ QAEPAVQuark @ 2 @ W4Feature @ 2 @ MMMM @ Z".
На этот раз разница заключается в отсутствии первых '2' между'@' в версии, которую ищет компилятор.
Это не первый случай, когда я создаю это приложение с Visual Studio, и оно всегда связывалось нормально, за исключением этого времени с последними изменениями.
Понятия не имею, заранее спасибо