gpt4 book ai didi

c++ - 无法调用命名空间方法

转载 作者:行者123 更新时间:2023-12-04 17:05:40 26 4
gpt4 key购买 nike

我无法从 File2 中的 File1 访问该方法,消息是“尚未声明”。
File1.cpp

namespace n1 
{
namespace
{
bool method(int x)
{
return x;
}
}
}
File2.cpp
#include <File1.cpp>
namespace n1
{
TEST_F(Test, shouldReturnTrue)
{
Expect_True(method(101));
}
}

最佳答案

I cannot acces the method from File1 in File2


的确。一个翻译单元不知道其他翻译单元中的声明。由于您在 File2.cpp 中调用该函数,因此必须在该翻译单元中声明该函数。
该问题的解决方案:在使用声明的文件中声明函数:
// File2.cpp
namespace n1
{
namespace
{
bool method(); // see next paragraph
}
}
现在,我们还有另一个问题。匿名命名空间中的函数是隐式静态的。并且必须在使用 ODR 的所有翻译单元中定义静态函数。所以,声明毕竟是不够的;我们需要定义:
// File2.cpp
namespace n1
{
namespace
{
bool method()
{
} // see addendum
}
}
现在,由于从未调用 File1.cpp 中的函数并且该文件不包含任何其他内容,我们实际上可以删除该文件。

附言函数定义具有未定义的行为,因为它不存在通过返回值(也不通过抛出)的函数,尽管返回类型是非空的。

关于c++ - 无法调用命名空间方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64580391/

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