C++复数类实现与GTest测试报错问题求助
复数类实现的两个问题解决办法
问题1:头文件找不到(lib/Complex.hpp: No such file or directory)
原因
编译测试文件时,编译器无法定位指定路径下的Complex.hpp。虽然Complex.cpp里的#include "lib/Complex.hpp"正常,说明Complex.cpp与lib目录同级,但测试文件的位置可能不同,或是编译命令未指定头文件搜索路径。
解决办法
两种常用方案:
- 调整include路径:若测试文件与
lib目录同级,保留#include "lib/Complex.hpp"即可;若测试文件在子目录(如tests目录),则改为#include "../lib/Complex.hpp"。 - 编译时指定搜索目录:用
-I参数告知编译器头文件位置,假设lib目录在当前工作目录下,编译命令可写为:g++ -I./lib test.cpp Complex.cpp -o test -lgtest -lgtest_main
问题2:a.real()调用参数不足(too few arguments in function call)
原因
你定义的real是类的成员函数,但错误地为它添加了Complex类型参数。成员函数通过this指针就能访问当前对象的成员变量,无需额外传参。现在调用a.real()未传参,与函数定义的参数要求不匹配,因此报错。
解决办法
修改Complex.hpp和Complex.cpp中的real函数:
- 头文件
Complex.hpp中,修改函数声明:double real(); // 返回当前复数的实部 - 实现文件
Complex.cpp中,修改函数实现:double Complex::real(){ return this->re; // 直接返回当前对象的re成员 }
修改后,ASSERT_FLOAT_EQ(a.real(), 0)即可正常调用,获取a的实部并与0比较。
内容的提问来源于stack exchange,提问作者A02
相关产品推荐
相关产品推荐

