无法访问命名空间中的函数 [已关闭]

Can't access function in namespace [closed]

提问人:nyedoardo 提问时间:9/1/2023 最后编辑:sepp2knyedoardo 更新时间:9/1/2023 访问量:54

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

3个月前关闭。

我刚刚创建了某种库来自动化一些 C++ 的东西,问题是,一个文件包含一个带有函数的命名空间,而另一个文件包含一个尝试调用该函数的类。

编译器说函数未定义。

文件1.cpp

namespace cs{
    void func(){
        //dosomething
    }
}

文件2.cpp

class cx{
    private:
    void custom(){
        cs::func(); //Compiler says "cs" has not been declared.
    }
}

请帮忙。

C++ 函数 命名空间

评论

1赞 Joel 9/1/2023
你有没有阅读过标签的信息?compiler-construction
0赞 Brian61354270 9/1/2023
名称是如何声明的(你忘了声明吗)?命名空间是否真的相关,或者删除它后是否得到相同的行为?cs::funcFile2.cpp
1赞 Sam Varshavchik 9/1/2023
这是一个明显的错别字:在实际代码中,如图所示,“File2.cpp”中缺少函数的声明。
3赞 463035818_is_not_an_ai 9/1/2023
请发布一个最小的可重复示例
2赞 463035818_is_not_an_ai 9/1/2023
你说“编译器说函数未定义”,然后在注释中“//编译器说”cs“尚未声明。是没有定义还是没有声明?编译器错误到底说明了什么?

答:

1赞 Remy Lebeau 9/1/2023 #1

您缺少 inside 的声明,例如:cs::func()File2.cpp

文件2.cpp

namespace cs{
    void func();
}

class cx{
    private:
    void custom(){
        cs::func();
    }
}

这将允许编译器知道函数在 中的存在,只要您编译并链接这两个文件,链接器就能够找到该函数。File2.cpp.cpp

也就是说,最好将该函数声明移动到一个文件中,然后您可以在需要时使用该文件,例如:.h#include

文件1.h

namespace cs{
    void func();
}

文件1.cpp

#include "File1.h"

namespace cs{
    void func(){
        //dosomething
    }
}

文件2.cpp

#include "File1.h"

class cx{
    private:
    void custom(){
        cs::func();
    }
}