プロジェクトにユーティリティ関数をいくつか書いています。ネストされた名前空間からいくつかの関数を使用しようとすると、奇妙な LNK2019 エラーが発生しました。Google と stackoverflow で検索しようとしましたが、何か役に立ちませんでした。
マイファイル
ヘッダファイルX.h
:
#pragma once
namespace A {
namespace B {
/**
* A função recebe edValue e devolve em ponto flutuante
* o inteiro mais próximo de edValue.
*
* Método usado: http://en.wikipedia.org/wiki/Directed_rounding#Round_half_up
*
* @param edValue valor que será arredondado.
* @return o inteiro mais próximo à edValue (em ponto flutuante).
*/
double round(double edValue);
}
}
CPP ファイルX.cpp
#include "StdAfx.h"
#include "X.h"
#include <cmath>
double A::B::round(double edValue)
{
return floor(edValue + 0.5);
}
エラーメッセージ
7>D.obj : error LNK2019: unresolved external symbol "double __cdecl A::B::round(double)" (?round@A@B@@YANN@Z) referenced in function "public: void __thiscall
編集(私の問題の解決策)
私のファイルX.{h,cpp}
はプロジェクト A にあり、私はプロジェクト B でそれらの関数を使用__declspec(dllexport)
しています。関数のプロトタイプで使用すると、プロジェクト B でこれらの関数を使用できます。これは、DLL のような A を使用するためです。Visual Studio 2010 でさまざまな C++ プロジェクトの関数を使用する方法でこのヒントを得ました。(@Luchian Grigore から返信) およびVisual studio: 2 つのプロジェクト間の関数のリンクに関する質問(@dascandy から返信)。