2017-03-21 55 views
-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 (

,我可以看到它,它似乎是刪除它崩潰,但不知道爲什麼,我環顧四周,類似的問題,但真的不能找到一個原因是想出這個問題,我將是在這一個一定的幫助表示感謝。

+2

歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+5

您誤解了析構函數的含義。它不是用來刪除'this'。 'this'已經*被「刪除」,析構函數調用是該刪除過程的一部分。 –

+1

您還誤解了語句是如何執行的,哪些(沒有循環)是從上到下的直線。如果你在一個函數中有兩個語句,那麼第一個語句總會首先發生。如果第一條語句是'return'語句,那麼它將立即執行。 'return'後的語句不會執行。 –

回答