c++编程中遇到的错误定位

/***********************************************************/

微笑invalid use of incomplete type struct 或者是class的解决办法

这个错误是找不到这个class 或struct 的具体实现

1> 常遇场景

定义了一个类 class A 要在类B中使用A

在B的 b.h中声明 class A; 并实例化出一个对象 A a;在b.cpp中直接使用A的成员函数会报这个错误

2> 解决办法

在b.cpp中添加这个类的头文件

/***********************************************************/

微笑error:jump to case label [-fpermissive]

1>

在c++中使用switch的时候遇到这样的问题 示例如下

            

        case FileName:
            in >> userName >> localHostName >> ipAddress;
            QString clientAddress, fileName;
            in >> clientAddress >> fileName;
            hasPendingFile(userName,ipAddress,clientAddress,fileName);
            break;
        
        case Refuse:{
            in >> userName >> localHostName;
            QString serverAddress;
            in >> serverAddress;
            QString ipAddress = getIP();
            if(ipAddress == serverAddress)
            {
                server->refused();
            }
            break;
        }
        default:
            break;
        }

如果case 后面不用{ }包起来会报错

   微笑 D:\code\qt\chat\widget.cpp:230: error: jump to case label [-fpermissive]

2>

这个错误的原因是 在case中定义了局部变量  ,这样就导致后面也可以访问这个局部变量 造成错误

3>

解决办法 把case 后面的代码全部用{ }包住

/***********************************************************/

微笑usr/include/c++/6.1.1/bits/stl_relops.:67: Parse error at "std"  linux下qt编译遇到的错误

1>

这人错误是因为没有安装 highlight 包

2>

sudo apt-get install hig****安装这个包,然后把之前编译的build-********那个文件夹删除,然后重新编译

微笑invalid use of incomplete type

1>

出现这个问题,表明编译器不知道所用的struct 或者是class的具体实现,通常出现在如下情况:假设我们有一个class some定义在some.h中,实现在some.cpp中,我们在other.cpp中要用到这个some 的方法,于是我们再other.h中声明可一个class some,并声明了要用到的方法,这样就会导致上述的问题,

2>

解决这个问题的方法是:在other.cpp中include some.h,这样编译器就会根据该头文件找到class some的具体定义,问题也就解决了。

undefined reference to `libusb_init@4'

微笑undefined reference to `libusb_init@4'

1>错误的原因是在.pro文件的库链接不正确

微笑terminate called after throwing an instance of 'std::bad_alloc' what(): std:

1> 错误原因:机器上没有足够的堆空间为程序分配,在你的代码中有大内存的 new 数组分配,例如我的错误-

void Widget::fillPoints()
{
    m_points = new GLfloat[320*240*3];
    for(int i = 0, j = 0; i < 240*320*3; i += 3, j++ )
    {
        int row = j / 320;
        int list = j % 320;
        m_points[i] = list * (GLfloat)0.01;
        m_points[i+1] = 2.4 - row * (GLfloat)0.01;
        m_points[i+2] = (GLfloat)m_data[j] * 0.01;
    }
}

在这个函数分配了一个大内存的数组,而这个函数会被多次调用,所以每次程序运行一会就会出现这个错误

2>解决办法:其实这个问题知道了报错原因,解决的办法就多了,向我解决的方法是,将points这个数组空间申请的代码放在类的构造函数中,这样就在程序运行的时候申请一次空间,以后一直使用这一个空间读写。









-------------

经常遇到错误 一直没有总结 再次遇到又不知道怎么解决  特意留文总结

以后会不定时的更新




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值