Я очень очень старался решить эту проблему. Мне всегда удавалось найти мой ответ через Google, и я впервые отправляю сообщения на форум из-за моей должной осмотрительности. Тем не менее, это полностью озадачило меня, и Google, похоже, рекомендует исходный код для gcc , что говорит о том, что эта проблема является редкостью.
Вот мой упрощенный код:
#include <sstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class DJPchar{
public:
//General Variables
unsigned char *word;
int length;
//Initialization Functions
DJPchar();
DJPchar(unsigned char *w, int len);
~DJPchar();
DJPchar& operator+=(const DJPchar& word2);
};
/////////////////////////////////////////////////////////////
//Initialization Functions
/////////////////////////////////////////////////////////////
DJPchar::DJPchar(){
word = NULL;
length = 0;
}
DJPchar::DJPchar(unsigned char *w, int len){
int i;
length = len;
word = new unsigned char[length];
for (i=0; i<length; i++){
word[i] = w[i];
}
}
DJPchar::~DJPchar(){
delete[] word;
}
/////////////////////////////////////////////////////////////
//Problem Function
/////////////////////////////////////////////////////////////
DJPchar& DJPchar::operator+=(const DJPchar &word2){
unsigned char *temp;
int i, newlength;
temp = this->word;
newlength = this->length + word2.length;
this->word = new unsigned char (newlength);
for(i=0; i<this->length; i++){
this->word[i] = temp[i];
}
for(i=this->length; i<newlength; i++){
this->word[i] = word2.word[i-this->length];
}
this->length = newlength;
delete[] temp;
return *this;
}
int main(){
unsigned char a;
unsigned char b[7];
a = 'b';
b[0] = 'b';
b[1] = 'a';
b[2] = 't';
b[3] = '\n';
b[4] = 200;
b[5] = 'n';
b[6] = '!';
DJPchar *c_a = new DJPchar(&a, 1);
DJPchar *c_b = new DJPchar(b, 7);
c_a += c_b; //Error Line
return 0;
}
Я создал большой список функций сравнения (я пытаюсь воссоздать строковый класс для беззнаковых символов, если кто-то знает что-то, что существует для этого, это было бы здорово!), И все они работали отлично, но ошибка Я получаю за это:
Broken.cpp:86: error: invalid operands of types ‘DJPchar*’ and ‘DJPchar*’ to binary ‘operator+’
Broken.cpp:86: error: in evaluation of ‘operator+=(class DJPchar*, class DJPchar*)’
и я сходил с ума, искал, использовал ли я «+» внутри функции, которую пытался использовать в качестве основы для +, а затем менял все виды указателей и еще много чего, и выводил их за пределы класса и внутри класса.
Завтра я могу сослаться на правило № 1 Общих правил перегрузки операторов , но сегодня я потратил 6 часов на то, что должно было занять четыре минуты, чтобы убедиться, что оно работает и двигаться вперед ... Я очень грустная панда.