Неразрешенные внешние ошибки в C ++ при использовании векторов и поиск - PullRequest
19 голосов
/ 14 мая 2011

Я пробовал этот код в совершенно отдельном проекте, и он отлично работает (единственное отличие состоит в том, что проект, который не работает, экспортируется как DLL). Вот код:

RTATMATHLIB.CPP

#include "stdafx.h"
#include "RTATMATHLIB.h"
#include <math.h>
#include <vector>
#include <algorithm>
#include <stdexcept>

using namespace std;

double someFunc(double** Y, int length)
{
    vector<double> myVector;

    for(int i = 0; i < length; i++)
    {
        double value = (*Y)[i];

        vector<double>::iterator it = find(myVector.begin(), myVector.end(), value);

        if(it != myVector.end())
        {
            continue;
        }
        else
        {
            myVector.push_back(value);
        }
    }
    return 0;
}

RTATMATHLIB.H

__declspec(dllexport) double someFunc(double** Y, int length);

ОШИБКА

Error   1   error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: __thiscall std::_Vector_const_iterator<double,class std::allocator<double> >::_Vector_const_iterator<double,class std::allocator<double> >(double *,class std::_Container_base_secure const *)" (??0?$_Vector_const_iterator@NV?$allocator@N@std@@@std@@QAE@PANPBV_Container_base_secure@1@@Z)  RTATMATHLIB.obj RTATMATHLIB
Error   2   fatal error LNK1120: 1 unresolved externals

И это все. Я не уверен, почему это работает в другом проекте, а не в этом ...

Ответы [ 4 ]

35 голосов
/ 14 мая 2011

Я нашел другое сообщение на форуме, где кто-то, похоже, сообщил о той же самой проблеме, с которой вы столкнулись.Пожалуйста, проверьте, определено ли

_DEBUG

в настройках вашего проекта (в C / C ++ - Препроцессор) или где-то в вашем коде (или включаемых файлах).

Это выглядиткак будто std :: vector думает, что вы строите отладочную сборку, когда вы фактически создаете сборку релиза.

Надеюсь, это поможет.

28 голосов
/ 20 ноября 2014

Проблемой в моем случае была конфигурация отладки с Runtime Library, установленным на Multi-threaded DLL.Исправление было изменить его на Multi-threaded Debug DLL.Ошибка ушла.Удаление макроса _DEBUG также было своего рода обходным путем, я думаю, что это не очень хорошая идея, потому что в итоге вы получаете отладочную сборку, связанную с не отладочной стандартной библиотекой.

3 голосов
/ 21 апреля 2014

Проблема была в том, что я определил _DEBUG в C / C ++ -> Препроцессор. Изменение его на NDEBUG решило проблему.

2 голосов
/ 03 марта 2015

работал для меня с: Проблемой в моем случае была конфигурация отладки с Runtime Library, установленной на многопоточную DLL. Исправление состояло в том, чтобы изменить это на Многопоточную Отладочную DLL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...