Как удалить предупреждения LNK4217 и LNK4049

У меня есть предупреждения на шаге ссылки. Эти предупреждения появляются только в режиме выпуска.

Моя программа состоит из двух частей: библиотеки, которая генерирует .lib, и исполняемого файла, который использует эту библиотеку.

Когда я создаю библиотеку, у меня нет предупреждений. Но когда я собираю свой исполняемый файл, по ссылке у меня появляются предупреждения LNK4217 и LNK4049. Например:

3>DaemonCommon.lib(Exception.obj) : warning LNK4217: locally defined symbol ??0exception@std@@QAE@ABQBD@Z (public: __thiscall std::exception::exception(char const * const &)) imported in function "public: __thiscall std::bad_alloc::bad_alloc(char const *)" (??0bad_alloc@std@@QAE@PBD@Z)
3>DaemonCommon.lib(CommAnetoException.obj) : warning LNK4217: locally defined symbol ??0exception@std@@QAE@ABQBD@Z (public: __thiscall std::exception::exception(char const * const &)) imported in function "public: __thiscall std::bad_alloc::bad_alloc(char const *)" (??0bad_alloc@std@@QAE@PBD@Z)

Я прочитал в MSDN, эти предупреждения могут быть вызваны объявлением __declspec (dllimport). Но в моих классах моей библиотеки я не декларировал ничего подобного. Например, вот мой класс Exception:

#ifndef _EXCEPTION_HPP__
#define _EXCEPTION_HPP__

#include <string>

namespace Exception
{
    class Exception  
    {
    public:
        // Constructor by default
        Exception();

        // Constructor parametrized
        Exception(std::string& strMessage);

        // Get the message of the exception
        virtual std::string getMessage() const;

        // Destructor
        virtual ~Exception();

    protected:

        // String containing the message of the exception
        std::string mStrMessage;
    };
}

#endif

Может кто-нибудь сказать мне, почему появляются эти предупреждения и как их удалить?

17
задан Cedekasme 8 August 2011 в 08:34
поделиться