помогите пожалуйста, у меня странная проблема, никак не могу решить.
Предпосылка: я использую 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@sulfur@@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@sulfur@@QAEPAVQuark@@W4Feature@2@MMMM@Z"
но в библиотеке есть "?addQuark@Cluster@sulfur@@QAEPAVQuark@2@W4Feature@2@MMMM@Z".
На этот раз разница заключается в отсутствии первой «2» между «@» в версии, которую ищет компилятор.
Это не первый раз, когда я создаю это приложение с помощью Visual Studio, и оно всегда линкуется нормально, за исключением этого раза с последними изменениями.
я ничего не понимаю, заранее спасибо
class Quark
, а другой — дляclass sulfur::Quark
. - person Rup   schedule 29.07.2010