-1
我創建了一個類,它表示作爲本規範中描述的信息包:類創建和使用問題
#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消息。在控制檯上,這是儘可能得到之前崩潰:
設置startP! 在設置!獲取startP (
,我可以看到它,它似乎是刪除它崩潰,但不知道爲什麼,我環顧四周,類似的問題,但真的不能找到一個原因是想出這個問題,我將是在這一個一定的幫助表示感謝。
歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
您誤解了析構函數的含義。它不是用來刪除'this'。 'this'已經*被「刪除」,析構函數調用是該刪除過程的一部分。 –
您還誤解了語句是如何執行的,哪些(沒有循環)是從上到下的直線。如果你在一個函數中有兩個語句,那麼第一個語句總會首先發生。如果第一條語句是'return'語句,那麼它將立即執行。 'return'後的語句不會執行。 –