C++ 使用命名空间C+的未定义引用+;

C++ 使用命名空间C+的未定义引用+;,c++,namespaces,undefined-reference,C++,Namespaces,Undefined Reference,当我想运行代码时,编译器会说对math::calc的未定义引用 我在StackOverflow阅读有关此问题的问题和答案,但这无助于我解决问题 公司h #包括 名称空间数学{ typedef标准::成对组件; 双重优先(公司a); ... } Comp.cpp #包括“comp.h” 名称空间数学{ 双重优先(公司a){ 首先返回a; } ... } Comp文件:每个函数返回Comp或double。我多次从cal.cpp文件调用函数 加州大学 #包括“comp.h” #包括“helper.

当我想运行代码时,编译器会说
对math::calc的未定义引用

我在StackOverflow阅读有关此问题的问题和答案,但这无助于我解决问题

公司h

#包括
名称空间数学{
typedef标准::成对组件;
双重优先(公司a);
...
}
Comp.cpp

#包括“comp.h”
名称空间数学{
双重优先(公司a){
首先返回a;
}
...
}
Comp
文件:每个函数返回
Comp
double
。我多次从
cal.cpp
文件调用函数

加州大学

#包括“comp.h”
#包括“helper.h”
名称空间数学{
组件计算(常量字符串和字符串);
...
}
cal.cpp

#包括“eval.h”
名称空间数学{
组件计算(常量字符串和字符串){
...
}
}
Cal
文件:有些函数返回
comp
类型,而不仅仅是
Cal
函数

助手

名称空间数学{
...
}
helper.cpp

#包括“helper.h”
名称空间数学{
...
}
helper
文件只包含我从
cal.cpp
文件调用的几个函数。每个函数都要调用几次

main.cpp

#包括“calc.h”
int main(){
字符串str=“”;
pair res=数学::计算(str);

cout您必须编译所有项目的*.cpp文件,然后链接它们(编译结果)正确-链接过程取决于您使用的环境/IDE,只需查找即可。如果您没有正确链接,最终可执行文件将不会具有所需的所有函数定义,因此会得到未定义的引用。

您确定错误来自代码编辑器而非编译器吗?有时编辑器会misi在大型代码库中进行解释。为此,您必须重新解析文件或将其保留(如果编译器编译得很好)。编译器在错误发生时也会给我错误?在编译期间还是在链接模块时?文件名是什么?在链接模块期间,您已经指出了cal.h而不是calc.h。如果我不使用
cal.h
文件,并且将
cal.cpp
文件放入
main.cpp
文件,那么另一件奇怪的事情就是我可以运行codE和它工作的精细并不奇怪,文件的内容(或者.h或.cp)被粘贴到Maun.CPP. C++中的包含指令简单地“复制”正在包含的文件内容。因此,在本例中,cal.cpp文件的所有内容都包含在main.cpp中,因此所有函数定义都可用-因此没有“未定义的引用”再一次,首先编译所有的cpp文件,这样你就有了这些文件的二进制等价物,然后将它们链接在一起,以获得最终的可执行结果。现在正在工作,我只需要重建项目,我说了一个奇怪的事情,我不知道会发生什么。幸运的是,它正在工作,我学到了一些我不知道的事情之前