C++学习笔记2----模板类、继承、struct在class内定义相关问题记录

背景:写的算法合并到项目组代码,编译发现一些以前没积累过的错误,这里记录下,也供大家参考。

一、问题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
{
    // ...
};

#########################
不积硅步,无以至千里
好记性不如烂笔头

觉得不错的话,记得点赞收藏哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值