Ошибка компилятора при использовании оператора присваивания для копирования массива в два класса - PullRequest
0 голосов
/ 01 апреля 2019

Я перегружаю функцию оператора присваивания для копирования массива символов в другой массив символов в других объектах. Я могу вызвать перегруженную функцию оператора присваивания, но не используя присваивание.

Не могли бы вы дать мне несколько советов, что я делаю неправильно? Могу ли я использовать два класса, используя оператор присваивания?

Спасибо, Серхио

pTest = myData;//Fails

pTest->operator=(myData);//this works
struct Data {
char sourceName[5] = { 'S','o','l' };
};

class Test {
public:
//virtual void operator=(Data data) = 0;
void operator=(Data data);
void Show();
private:
char nameTest1[10];
};

void Test::operator=(Data data) {
strcpy_s(nameTest1, data.sourceName);
}

void Test::Show() {
cout << nameTest1;
}

int main() {
Test *pTest = new Test();
Data myData;
pTest = myData;//Fails
pTest->operator=(myData);//but this works
}

Ожидаемый результат: массив sourceName из объекта данных назначен массиву nameTest1 в объекте Test.

1 Ответ

4 голосов
/ 01 апреля 2019

pTest - это указатель.

*pTest = myData;

должен работать.

Постарайтесь помнить, что указатель и на что он указывает - две разные вещи.И то, и другое можно манипулировать в коде C ++, поэтому новички часто путают их.

...