Ошибка связи при создании проекта модульного тестирования C ++ в VS.NET 2010 - PullRequest
3 голосов
/ 26 сентября 2011

Я пытаюсь создать очень простой проект модульного тестирования C ++. Установка так же, как оказалось, точно такая же, как описанная в этом блоге . Я построил статическую библиотеку TestLib.lib и проект модульного тестирования C ++ под названием TestProject. Оба проекта используют набор инструментов платформы v100.

Testlib содержит только один класс.

BaseClass.h

#pragma once 

class BaseClass
{
public:
    void Method1();
};

BaseClass.cpp

#include "BaseClass.h"
#include <iostream>
#include <list>

using namespace std;

void BaseClass::Method1()
{
    list<int> dummy(0);
    cout << "Hello world";
}

TestProject имеет только один контрольный пример.

#include "BaseClass.h"
#include <list>
.
.
.
[TestMethod]
void TestMethod1()
{
    BaseClass b;
    b.Method1();
};

Похоже, если у меня будет #include <list> после #include "BaseClass.h" (в test.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 Ответ

2 голосов
/ 03 декабря 2011

Ошибка появляется только при компиляции конфигурации отладки?Если это так, это может быть связано с вашей связью библиотеки времени выполнения C ++:

http://social.msdn.microsoft.com/Forums/eu/vclanguage/thread/e5a78770-4d99-40b7-951f-e4466d2744a8

...