Externes non résolus en C++ lors de l'utilisation de vecteurs et de trouver
-
14-11-2019 - |
Question
J'ai essayé ce code dans un tout autre projet, et cela fonctionne très bien (la seule différence étant que le projet qui n'est pas le travail, c'est d'être exportée sous forme d'une DLL).Voici le code:
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);
Les ERREURS
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
Et c'est tout.Je ne suis pas sûr de savoir pourquoi cela fonctionne dans l'autre projet et non pas sur celui-ci...
La solution
J'ai trouvé un autre poste de forum, où quelqu'un semble avoir signalé le même problème exact que vous rencontrez.S'il vous plaît vérifier pour voir si vous avez
_DEBUG
Défini soit dans les paramètres de votre projet (sous C / C ++ - préprocesseur) ou quelque part dans votre code (ou inclure des fichiers).
Il semble que STD :: Vecteur pense que vous construisez une construction de débogage, lorsque vous créez une version de version.
J'espère que cela vous aidera.
Autres conseils
Le problème dans mon cas est une configuration de Débogage avec Runtime Library
mis à Multi-threaded DLL
.La solution était de changer de Multi-threaded Debug DLL
.L'erreur a disparu.La suppression _DEBUG
macro a été aussi une sorte de solution de contournement, par je suppose que ce n'est pas une bonne idée parce que vous vous retrouvez avec debug lié à la non-débogage de la bibliothèque standard.
Le problème était que j'ai eu _debug défini dans C / C ++ -> Préprocesseur.Le modifier à NDEBUG a résolu le problème.
a travaillé pour moi avec: Le problème dans mon cas a été une configuration de débogage avec la bibliothèque d'exécution définie sur la DLL multi-thread.Le correctif consistait à le changer en DLL multi-threadé