使用命名空间 C++ 的未定义引用
Undefined reference using namespace C++
当我想要 运行 编译器说的代码时 undefined reference to math::calc
我在 Whosebug 上阅读了有关此问题的问答,但它并没有帮助我解决问题。
Comp.h
#include <utility>
namespace math {
typedef std::pair<double,double> Comp;
double getFirst(Comp a);
...
}
Comp.cpp
#include "comp.h"
namespace math {
double getFirst(Comp a) {
return a.first;
}
...
}
Comp
文件:每个函数 return Comp
或 double
。我多次从 cal.cpp
文件中调用函数
cal.h
#include "comp.h"
#include "helper.h"
namespace math {
Comp calc(const string& str);
...
}
cal.cpp
#include "eval.h"
namespace math {
Comp calc(const string& str) {
...
}
}
Cal
文件:某些函数 return 具有 comp
类型,而不仅仅是 cal
函数。
helper.h
namespace math {
...
}
helper.cpp
#include "helper.h"
namespace math {
...
}
helper
文件只包含我从 cal.cpp
文件调用的几个函数。每个函数都调用了几次。
main.cpp
#include "calc.h"
int main() {
string str = " ";
pair<double,double> res = math::calc(str);
cout << res.first << " " << res.second << endl;
return 0;
}
在整个项目中,我没有使用任何类。
除了 c++ 原始文件外,我包括了我调用的所有文件。
我在每个文件中都使用了 std 命名空间,但我没有在这里写。
我完全不知道我的代码可能有什么问题。
如果我还在 main.cpp
中包含 cal.cpp
,代码编辑器会对我从 helper.h
调用的每个文件显示 undefined reference
。我不想在刚才提到的 main
文件中包含 cal.cpp
您必须编译所有项目的 *.cpp 文件,然后 link 正确编译它们(编译结果)- linking 过程取决于您 environment/IDE使用,只需查找它。如果你没有 link 正确地处理它,最终的可执行文件将不会有所有需要的函数定义,因此得到 undefined reference.
当我想要 运行 编译器说的代码时 undefined reference to math::calc
我在 Whosebug 上阅读了有关此问题的问答,但它并没有帮助我解决问题。
Comp.h
#include <utility>
namespace math {
typedef std::pair<double,double> Comp;
double getFirst(Comp a);
...
}
Comp.cpp
#include "comp.h"
namespace math {
double getFirst(Comp a) {
return a.first;
}
...
}
Comp
文件:每个函数 return Comp
或 double
。我多次从 cal.cpp
文件中调用函数
cal.h
#include "comp.h"
#include "helper.h"
namespace math {
Comp calc(const string& str);
...
}
cal.cpp
#include "eval.h"
namespace math {
Comp calc(const string& str) {
...
}
}
Cal
文件:某些函数 return 具有 comp
类型,而不仅仅是 cal
函数。
helper.h
namespace math {
...
}
helper.cpp
#include "helper.h"
namespace math {
...
}
helper
文件只包含我从 cal.cpp
文件调用的几个函数。每个函数都调用了几次。
main.cpp
#include "calc.h"
int main() {
string str = " ";
pair<double,double> res = math::calc(str);
cout << res.first << " " << res.second << endl;
return 0;
}
在整个项目中,我没有使用任何类。
除了 c++ 原始文件外,我包括了我调用的所有文件。
我在每个文件中都使用了 std 命名空间,但我没有在这里写。
我完全不知道我的代码可能有什么问题。
如果我还在 main.cpp
中包含 cal.cpp
,代码编辑器会对我从 helper.h
调用的每个文件显示 undefined reference
。我不想在刚才提到的 main
文件中包含 cal.cpp
您必须编译所有项目的 *.cpp 文件,然后 link 正确编译它们(编译结果)- linking 过程取决于您 environment/IDE使用,只需查找它。如果你没有 link 正确地处理它,最终的可执行文件将不会有所有需要的函数定义,因此得到 undefined reference.