gpt4 book ai didi

c++ - 内联非成员函数中的本地类使用 MSVC2005 生成 LNK2005

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

显然,MSVC2005 无法内联本地类的成员函数,导致 LNK2005。

我在编译以下内容时遇到了这个 LNK2005 错误:

common.h内容:

inline void wait_what()
{
struct wtf
{
void ffffuuu() {}

} local;
}

foo.cpp内容:

#include "common.h"

void foo()
{
wait_what();
}

bar.cpp内容:

#include "common.h"

void bar()
{
wait_what();
}

LNK2005.cpp 内容:

// forward declarations
void foo();
void bar();

int main()
{
foo();
bar();

return 0;
}

错误信息是:

error LNK2005: "public void __thiscall `void__cdecl wait_what(void)'::`2'::wtf::ffffuuu(void)" (?ffffuuu@wtf?1??wait_what@@YAXXZ@QAEXXZ) already defined in bar.obj

关于局部类,ISO IEC 14882-2003 说:

9.8 Local class declarations

A class can be defined within a function definition; such a class is called a local class. The name of a local class is local to its enclosing scope. The local class is in the scope of the enclosing scope, and has the same access to names outside the function as does the enclosing function. Declarations in a local class can use only type names, static variables, extern variables and functions, and enumerators from the enclosing scope.

An enclosing function has no special access to members of the local class; it obeys the usual access rules (clause 11). Member functions of a local class shall be defined within their class definition, if they are defined at all.

我错过了什么吗?

对我来说,这看起来像是一个编译器错误。 GCC 和 MSVC2008 编译它就好了。但是,我想知道他们是否真的会内联调用,或者只是在链接阶段丢弃两个符号之一。有趣的是,您会注意到甚至没有调用此本地类成员函数。

我想知道是否有针对 MSVC2005 的解决方法。我试图在 MSDN 上搜索这个典型问题,但没有成功:我什至无法找到编译器的已知错误列表。


附件:LNK2005.zip

最佳答案

这是 visual studio 2005 中的错误,已在 vs 2008 中修复

关于c++ - 内联非成员函数中的本地类使用 MSVC2005 生成 LNK2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078087/

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