Ошибка E0137 Выражение должно быть допустимым для изменения левосторонним значением
for (int i = 0; i < 50000; i++) {
Bomb b;
b.weight = rand() % 100;
b.color = "red"; // Ошибка E0137
b.tnt = rand() % 1000;
bombs.push_back(b);
}
При b.color == "red"; ошибка исчезает, но слово "red" в консоль не выводится. Можете, пожалуйста, помочь решить данную проблему.
КОД:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct Bomb {
float weight;
char color[10];
float tnt;
};
struct DynamicArray {
Bomb* data;
int capacity;
int current_size;
DynamicArray() {
capacity = 1;
current_size = 0;
data = new Bomb[capacity];
}
~DynamicArray() {
delete[] data;
}
void resize() {
capacity *= 2;
Bomb* newData = new Bomb[capacity];
memcpy(newData, data, current_size * sizeof(Bomb));
delete[] data;
data = newData;
}
void push_back(Bomb element) {
if (current_size == capacity) {
resize();
}
data[current_size++] = element;
}
Bomb pop_back() {
if (current_size == 0) {
cout << "Error: array is empty" << endl;
return Bomb{};
}
Bomb element = data[current_size--];
return element;
}
Bomb get(int n) {
if (n < 0 || n >= current_size) {
cout << "Error: index out of bounds." << endl;
return Bomb{};
}
return data[n];
}
int size() {
return current_size;
}
void print() {
for (int i = 0; i < current_size; i++) {
cout << "Bomb " << i << ": weight=" << data[i].weight << ", color=" << data[i].color << ", tnt=" << data[i].tnt << endl;
}
}
void clear() {
delete[] data;
capacity = 1;
current_size = 0;
data = new Bomb[capacity];
}
void push_front(Bomb element) {
if (current_size == capacity) {
resize();
}
for (int i = current_size; i > 0; i--) {
data[i] = data[i - 1];
}
data[0] = element;
current_size++;
}
Bomb pop_front() {
if (current_size == 0) {
cout << "Error: cannot pop from empty array." << endl;
return Bomb{};
}
Bomb element = data[0];
for (int i = 0; i < current_size - 1; i++) {
data[i] = data[i + 1];
}
current_size--;
return element;
}
};
int main() {
DynamicArray bombs;
clock_t startTime = clock();
for (int i = 0; i < 50000; i++) {
Bomb b;
b.weight = rand() % 100;
b.color = "red";
b.tnt = rand() % 1000;
bombs.push_back(b);
}
clock_t endTime = clock();
double seconds = (double(endTime - startTime)) / CLOCKS_PER_SEC;
cout << "Add 50000 items to the end: " << seconds << " s" << endl;
return 0;
}
Источник: Stack Overflow на русском