背景:写的算法合并到项目组代码,编译发现一些以前没积累过的错误,这里记录下,也供大家参考。
一、问题1
// 每个类都有单独的.h .cpp
class A;
class B : public A
{// ...
};
class C : public A
{// ...
};
若在B.h中引用了一个.hpp文件,编译时提示 在C.cpp中也存在一个.hpp内容定义,即出现了重定义内容
解决方式
不使用.hpp方式,应该使用.h .cpp方式,即声明与实现分别写在两个文件中
二、问题2
template <typename T>
class A
{// ...
};
对于模板类,分写.h .cpp时,编译会出现找不到实现情况,这是gcc本身问题
解决方式
1) 将模板类写成.hpp文件,即声明和实现都写在一个文件中,这是一种不规范的做法
2) 在.h文件中,声明 .tpp, eg: #include “A.tpp” ,然后在 A.tpp 中写实现代码, 这种写法比较少见
参考
三、问题3
class A
{struct B{double c = 0.0;...};// ...
};
编译报错:
error: default member initializer for 'A::B::c' required before the end of its enclosing class
解决方式
一种可行参考方案,将B定义放在class A的前面,即在A前面加上struct B:
struct B
{double c = 0.0;...
};
class A
{// ...
};
#########################
不积硅步,无以至千里
好记性不如烂笔头
觉得不错的话,记得点赞收藏哈~