类创建和使用问题

Class Creation and use issues

本文关键字:问题 创建      更新时间:2023-10-16

我创建了一个表示信息包的类,如以下代码所述:

#ifndef PACKET_H_
#define PACKET_H_
namespace std {
class Packet
{
public:
    Packet();
    virtual ~Packet();
    void initClass();
    void setStartP(char);
    void setAddFrom(char);
    void setAddTo(char);
    void setpDataSize(char);
    void setpNumber(char);
    void setChecksum(char);
    void setEndP(char);
    void LoadData(char);
    char getStartP();
    char getAddFrom();
    char getAddTo();
    char getpDataSize();
    char getChecksum();
    char getEndP();
    char getData();

private:
    char pB[261];
    char pDataMax;
    char pDataIndex;

};
} /* namespace std */
#endif /* PACKET_H_ */

#include "Packet.h"
#include <iostream>
namespace std {

Packet::Packet()
{
    pDataIndex = 0;
    initClass();
}
Packet::~Packet()
{
    delete this;
}
void Packet::setStartP(char startChar)
{
    pB[0] = startChar;
    cout << "in Set!";
}
void Packet::setAddFrom(char fromChar)
{
}
void Packet::setAddTo(char toChar)
{
}
void Packet::setpDataSize(char dataSizeChar)
{
}
void Packet::setpNumber(char packetNumber)
{
}
void Packet::setChecksum(char checksumChar)
{
}
void Packet::setEndP(char endChar)
{
}
void Packet::LoadData(char dataChar)
{

}
char Packet::getStartP()
{
    return pB[0];
    cout << "in Get";
}
char Packet::getAddFrom()
{
    return pB[1];
}
char Packet::getAddTo()
{
    return pB[2];
}
char Packet::getpDataSize()
{
    return pB[3];
}
char Packet::getChecksum()
{
    return pB[4];
}
char Packet::getEndP()
{
    return pB[260];
}
char Packet::getData()
{
    return pB[6 + pDataIndex];
}
void Packet::initClass()
{
    pDataMax = 254;
    pDataIndex = 0;
}
}

这一点上,我只是在测试它,所以我只是实现了其中两种方法。当我尝试运行该程序时:

#include <iostream>
#include "Packet.h"

using namespace std;
Packet myPacket;
void buildPacket();
int main() {
    buildPacket();
    return 0;
}

void buildPacket( )
{
    char startP = 0x28;
    cout << "Setting startP!" << endl;
    myPacket.setStartP(startP);
    cout << "Getting startP" << endl;
    cout << myPacket.getStartP() << endl;
    cout << "Done";
}

代码很好,编译/构建时没有问题,它是一个运行时,它会失败。这真的让我很震惊,它真的让我怀疑我对C++中创建和使用类的实际了解。该程序将运行到某个点,然后崩溃并显示 Windows 消息。在控制台上,这是崩溃之前

达到的程度:

设置启动P! 在设置!入门P (

正如我所看到的,它似乎在删除时崩溃了,但不确定为什么。我四处寻找类似的问题,但找不到它提出这个的原因,我将不胜感激。

不要在析构函数中调用delete this。对象会自动销毁,因为它超出了范围,无需delete

您可以在此处阅读有关它的更多信息:http://en.cppreference.com/w/cpp/language/scope