声明方法时没有名称空间,也没有对C 作用的方法的对象

No namespace when declaring a method, and no object for the method to act upon in c++

本文关键字:方法 作用 对象 有名称 空间 声明      更新时间:2023-10-16

上下文

我正在浏览一个不是我的大型C 代码库,我遇到了这个问题

问题

假设我们在标题文件中有一个(AClass(:

double MethodName(anObject& obj, string s)

,并且在CXX文件中定义了它,而不是:

double AClass::AMethod(anObject& obj, string s){

正如人们所期望的,而是:

double AMethod(anObject& obj, string s){

没有名称空间声明。这是整个CXX文件中唯一的定义方法。该方法上没有静态声明,AClass不会从任何其他类中继承。

另外,我看到了它是如何称呼的(在一个完全不同的文件中,除了Aclass.h和Aclass.cxx(,该线看起来像这样:

if(AMethod(obj1, str)>0){

我的问题是,这甚至如何编译和运行。我希望该代码在编译时会步履蹒跚

研究

这很难搜索。它是如此基础,以至于没有直接覆盖,或者发生了一些复杂的事情。如果这是一个简单的问题,请引导我进入我可以搜索的主题。我已经浏览了这些:

将类声明放入.cpp文件

正确的方法来定义.cpp文件中的C 名称空间方法

,但它们不是很相关。我还尝试了谷歌搜索:

" C 在CPP文件中定义一种方法"

" C 在CPP文件中定义方法时没有名称空间"

等,但无济于事。

nb

如果您想降低投票,如果您要提供理由,我将不胜感激,否则,我不会学到。另外,如果您还有更多信息,您需要,我会尽力填补您

谢谢

对于此声明: double MethodName(anObject& obj, string s),您不会期望这一点: double AClass::AMethod(anObject& obj, string s)。您会期望这样:double AClass::MethodName(anObject& obj, string s)

您指的是AMethod(obj1, str)>0){的呼叫仅在.cpp文件中而不在标题中,因此它是.cpp-局部函数;没有名称空间;这是一个全球函数。这可能会发生,因此必须包括类的其他类不必编译此功能。如果是这种情况,则Amethod不能使用类成员;它只能使用传递的数据作为变量。