1

我正在为我的项目编写一些实用程序函数。当我尝试使用嵌套命名空间中的一些函数时,出现了一个奇怪的 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);
    }
}

文件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:关于两个项目之间的链接功能的问题(@dascandy 回复)。

4

2 回答 2

0

如果函数的代码位于不同的项目中,则必须将其编译为静态或动态库,然后将库添加到链接器 > 输入 > 附加依赖项下的项目选项中的调用项目(对于 MS Visual Studio)。

于 2012-10-04T11:31:29.860 回答
0

你需要做两件事:

  • 在 Linker > General > Additional Dependencies 下指定您正在使用的库的路径 + - - 在 Linker > Input > Additional Dependencies 下指定您正在使用的库
于 2012-10-04T12:27:07.190 回答