gpt4 book ai didi

c++ - 使用命名空间的静态库导致无法解析的外部

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:47 25 4
gpt4 key购买 nike

我正在使用 VS2013,我有一个带有以下 header 的静态库项目:

#pragma once

namespace StaticLibNamespace
{
void foo( void );
}

然后在cpp中定义函数如下:

#include "stdafx.h"
#include "StaticLibHeader.h"

using namespace StaticLibNamespace;

void foo( void )
{
;
}

在我的简单控制台应用程序中,我包含了对 StaticLibNameSpaceTest.lib 的引用,我的主要功能如下:

#include "stdafx.h"
#include "..\StaticLibNamespaceTest\StaticLibHeader.h"


int _tmain(int argc, _TCHAR* argv[])
{
StaticLibNamespace::foo();

return 0;
}

如果我尝试编译它,我会收到以下错误:NamespaceTest.obj:错误 LNK2019:未解析的外部符号“void __cdecl StaticLibNamespace::foo(void)”(?foo@StaticLibNamespace@@YAXXZ) 在函数 _wmain 中引用

但是,如果我将我的静态 lib cpp 文件更改为以下内容,一切都很好:

#include "stdafx.h"
#include "StaticLibHeader.h"

void StaticLibNamespace::foo( void )
{
;
}

我显然不理解“使用命名空间”所发生的一切,有人可以启发我吗?谢谢!

最佳答案

using namespace 指令在编译器看到非限定名称并需要查找它所指的内容时更改符号的查找规则。

但是,在您的情况下,您正在定义一个名为 foo 函数。作为一个非限定名称,这在全局命名空间中定义了一个新的 foo(假设那里还没有)。当您限定名称时,您正在按照您的意图定义 StaticLibNamespace::foo

不同的解决方案可能是:

namespace StaticLibNamespace {

void foo( void )
{
;
}

} // namespace StaticLibNamespace

关于c++ - 使用命名空间的静态库导致无法解析的外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com