提问人:LunchMarble 提问时间:5/15/2011 更新时间:3/11/2015 访问量:24193
使用 vectors 和 find 时 C++ 中未解析的外部变量
Unresolved externals in C++ when using vectors and find
问:
我已经在一个完全独立的项目中尝试了这段代码,它工作正常(唯一的区别是不起作用的项目被导出为 DLL)。代码如下:
RTATMATHLIB 中。CPP(英语: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
就是这样。我不确定为什么它在另一个项目中起作用,而不是这个......
答:
36赞
Lucky Luke
5/15/2011
#1
我发现了另一个论坛帖子,其中似乎有人报告了与您遇到的完全相同的问题。请检查您是否有
_DEBUG
在项目设置中定义(在 C/C++ -- 预处理器下)或代码中的某个位置(或包含文件)。
看起来 std::vector 认为您正在构建调试版本,而实际上您正在创建发布版本。
我希望这会有所帮助。
3赞
Yonatan Simson
4/21/2014
#2
问题是我在 C/C++->Preprocessor 中定义了_DEBUG。将其更改为 NDEBUG 解决了该问题。
评论
1赞
MLMLTL
6/16/2015
非常感谢你,试图让它工作起来的很多问题令人难以置信......
28赞
cubuspl42
11/21/2014
#3
就我而言,问题是设置为 的 Debug 配置。解决方法是将其更改为 .错误消失了。删除宏也是一种解决方法,我想这不是一个好主意,因为您最终会得到链接到非调试标准库的调试版本。Runtime Library
Multi-threaded DLL
Multi-threaded Debug DLL
_DEBUG
评论
1赞
Andrew
5/20/2015
这为我解决了这个问题。我得到:“错误LNK2001:未解析的外部符号__imp__CrtDbgReportW”。这与我在 Direct3D11 应用程序中从 32 位切换到 64 位有关。在 Visual Studio 2013 Community 中,此设置位于“项目属性”-“>配置属性”-“> C/C++”-“>代码生成”-“>运行时库”下。
0赞
edin-m
10/9/2016
我也是,我正在使用 msvc2015 编译中断板并且需要 /MD,它适用于发布,但需要 /MDd 进行调试
2赞
Anurag Daware
3/3/2015
#4
为我工作: 就我而言,问题是将运行时库设置为多线程 DLL 的调试配置。解决方法是将其更改为多线程调试 DLL
上一个:未解析的外部符号LNK2019
评论