尝试使用命名空间中的函数时出现LNK2019错误

时间:2012-10-04 10:55:41

标签: c++ visual-c++ namespaces compiler-errors

我正在为我的项目编写一些utils函数。当我尝试使用嵌套命名空间中的某些函数时,我收到了一个奇怪的LNK2019错误。我试图在谷歌和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和Im中使用项目B中的那些函数。如果我在我的函数原型中使用__declspec(dllexport)我可以在项目B中使用这些函数,因为它使用类似DLL的函数。我在How to use functions from different C++ projects in Visual Studio 2010?(@Luchian Grigore回复)和Visual studio: question about linking functions between two projects(@dascandy回复)中得到了这个提示。

2 个答案:

答案 0 :(得分:0)

如果函数的代码在不同的项目中,则必须将其编译为静态或动态库,然后将库添加到Linker&gt;下项目选项中的调用项目中。输入&gt;附加依赖项(适用于MS Visual Studio)。

答案 1 :(得分:0)

你需要做两件事:

  • 指定您在Linker&gt;下使用的库的路径一般&gt;附加依赖项+ - - 指定您在Linker&gt;下使用的库。输入&gt;附加依赖