web-dev-qa-db-ja.com

ベクトルを使用して検索する場合のC ++の未解決の外観

私はこのコードを完全に別のプロジェクトで試しましたが、正常に機能します(唯一の違いは、機能していないプロジェクトが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

以上です。このプロジェクトではなく、他のプロジェクトで機能する理由がわかりません...

19
MintGrowth

私は別のフォーラム投稿を見つけました。そこでは、誰かがあなたが抱えているのとまったく同じ問題を報告したようです。あなたが持っているかどうかを確認してください

_DEBUG

プロジェクト設定(C/C++-プリプロセッサの下)またはコードのどこか(またはインクルードファイル)で定義されます。

Std :: vectorは、実際にはリリースビルドを作成しているのに、デバッグビルドをビルドしていると見なしているように見えます。

これがお役に立てば幸いです。

35
Lucky Luke

私の場合の問題は、Runtime LibraryMulti-threaded DLLに設定されたデバッグ構成でした。修正はそれをMulti-threaded Debug DLLに変更することでした。エラーはなくなりました。 _DEBUGマクロを削除することも一種の回避策でした。デバッグビルドが非デバッグ標準ライブラリにリンクされてしまうため、これはお勧めできません。

28
cubuspl42

問題は、C/C++-> Preprocessorで_DEBUGが定義されていることでした。 NDEBUGに変更すると、問題は解決しました。

3
Yonatan Simson

私のために働いた:私の場合の問題は、ランタイムライブラリがマルチスレッドDLLに設定されたデバッグ構成でした。修正は、マルチスレッドデバッグDLLに変更することでした

2
Anurag Daware