Ошибка связи при построении проекта модульного тестирования C++ в VS.NET 2010 год
Я пытаюсь построить очень простой проект модульного тестирования C++. Просто так получилось, что установка точно такая же, как описал этот блог . Я построил статическую библиотеку TestLib.lib и проект модульного тестирования C++ под названием TestProject. Оба проекта с использованием инструментов платформы твердотельного накопителя V100, если.
Testlib содержит только один класс.
Базовый класс.h
#pragma once
class BaseClass
{
public:
void Method1();
};
Базовый класс.cpp
#include "BaseClass.h"
#include <iostream>
#include <list>
using namespace std;
void BaseClass::Method1()
{
list<int> dummy(0);
cout << "Hello world";
}
Тестовый проект имеет только один тест дело.
#include "BaseClass.h"
#include <list>
.
.
.
[TestMethod]
void TestMethod1()
{
BaseClass b;
b.Method1();
};
Это выглядит так, если у меня есть #include <list>
после #include "BaseClass.h"
(в тесте.cpp) у меня будет следующая ошибка ссылки. Если я выну #include <list>
, у меня вообще не будет ошибки связи.
TestLib.lib(BaseClass.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification
MSVCMRT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200003d).
MSVCMRT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x02000063).
LINK : fatal error LNK1255: link failed because of metadata errors
Ошибка ссылки исчезнет, если я добавлю еще одну строку в тестовую программу, например:
#include "BaseClass.h"
#include <list>
.
.
.
[TestMethod]
void TestMethod1()
{
std::list<int> dummy(0);
BaseClass b;
b.Method1();
};
Однако теперь у меня есть два предупреждения о ссылке. Я не уверен, связаны ли они с предыдущими ошибками ссылок.
TestLib.lib(BaseClass.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
Может ли кто-нибудь объяснить почему? Неужели я упустил что-то очевидное?1 ответ:
Появляется ли ошибка только при компиляции конфигурации отладки? Если да, то это может быть связано с вашей связью библиотеки времени выполнения C++:
Http://social.msdn.microsoft.com/Forums/eu/vclanguage/thread/e5a78770-4d99-40b7-951f-e4466d2744a8