Подтвердить что ты не робот

Неразрешенные внешние символы в С++ при использовании векторов и поиск

Я пробовал этот код в полностью отдельном проекте, и он отлично работает (с той лишь разницей, что проект, который не работает, экспортируется как 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 *)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected]@@Z)  RTATMATHLIB.obj RTATMATHLIB
Error   2   fatal error LNK1120: 1 unresolved externals

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

4b9b3361

Ответ 1

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

_DEBUG

определяется либо в ваших настройках проекта (в разделе C/С++ - Preprocessor), либо где-то в вашем коде (или включать файлы).

Похоже, что std::vector думает, что вы строите сборку отладки, когда вы на самом деле создаете сборку выпуска.

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

Ответ 2

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

Ответ 3

Проблема заключалась в определении _DEBUG в C/С++ → Preprocessor. Изменение его в NDEBUG решило проблему.

Ответ 4

Работал для меня: В моем случае проблема заключалась в настройке Debug с Runtime Library, установленной в многопоточную DLL. Исправление заключается в том, чтобы изменить его на многопоточную Debug DLL