我正在研究只包含字符數組的類,它的大小(以字節爲單位)。目前,我想爲該類重載'+'操作數(以實現連接)。構造函數工作正常。對象被創建,我可以在調試器中看到它們的字段和值。我被困在使用'+'的地方(main(第13行))。代碼編譯得很好,甚至沒有警告,但是當我運行它時,我的程序因「無效指針消息」失敗。我發現那個無效指針在哪裏。它在'+'實現中(BufferArray.cpp,第39行)。當我調用SetBuffer時,char數組被正確賦值(我在運算符實現範圍中看到它的值爲'qwasd'),但是在下一行時,它在我調用SetSize時消失。我不知道爲什麼。在char數組包裝類中實現C++ setter的正確方法是什麼?
我的setter有什麼問題,在這種情況下如何實現'+'操作數?
在此先感謝。
這裏是我一起工作的代碼:
BufferArray.h:
#include <string.h>
#include <stdio.h>
#ifndef BUFFERARRAY_H
#define BUFFERARRAY_H
class BufferArray {
public:
BufferArray(char* reservedPlace);
BufferArray();
void SetSize(int sz);
int GetSize();
void SetBuffer(char* buf);
char* GetBuffer();
BufferArray operator+ (BufferArray bArr) const;
virtual ~BufferArray();
private:
int size;
char *buffer;
};
#endif /* BUFFERARRAY_H */
實施是在未來的文件BufferArray.cpp:
#include "BufferArray.h"
// Constructors.
BufferArray::BufferArray(){
size = 0;
strcpy(buffer, "");
}
BufferArray::BufferArray(char* reservedPlace) {
size = strlen(reservedPlace);
buffer = reservedPlace;
}
// Getters and setters.
void BufferArray::SetSize(int sz)
{
size = sz;
}
int BufferArray::GetSize()
{
return size;
}
void BufferArray::SetBuffer(char* buf)
{
buffer = buf;
}
char* BufferArray::GetBuffer()
{
return buffer;
}
// Operator +.
BufferArray BufferArray::operator+ (BufferArray bArr) const
{
char tempCharArray[strlen(buffer) + strlen(bArr.GetBuffer())];
strcpy(tempCharArray, buffer);
strcat(tempCharArray, bArr.GetBuffer());
BufferArray tempBA;
tempBA.SetBuffer(tempCharArray);
tempBA.SetSize(strlen(bArr.GetBuffer()) + strlen(buffer)); // Vanishes buffer field.
printf("%d",tempBA.GetSize());
return tempBA;
}
// Destructor.
BufferArray::~BufferArray() {
// Destroy the pointer.
delete [] buffer;
}
而且主要功能:
#include <cstdlib>
#include <iostream>
#include "BufferArray.h"
using namespace std;
int main(int argc, char** argv) {
BufferArray ba1;
char tmp1[3] = "qw";
char tmp2[4] = "asd";
ba1.SetSize(strlen(tmp1));
ba1.SetBuffer(tmp1);
BufferArray ba2(tmp2);
BufferArray ba3 = ba1 + ba2; // Runtime error is here.
cout << ba3.GetBuffer() << endl;
return 0;
}
我試着看的時候,「BUF」作爲傳遞什麼樣的strlen(BUF)返回一個輸入參數,並發現它工作正常(它返回5)。感謝您的答案!我正在努力修復我的班級。在工作後我會接受適當的答案。 – 2011-05-22 10:02:31
它的工作原理!除了使用'new'關鍵字創建char數組的setter和構造函數代碼的更改外,我還需要像這樣動態分配BufferArray tempBA:BufferArray * tempBA = new BufferArray(tempCharArray);然後我返回* tempBA,而不是tempBA。 – 2011-05-22 19:12:25