Можно ли назначить две структуры разного типа?
Мне нужно назначить аналогичную структуру другому, просто имена разные. Если это одноименное имя, мы могли бы использовать =(присваивание) напрямую. Я не хочу использовать memcopy, поскольку он будет копировать биты.
struct first{
int i;
char c;
}
struct second{
int i;
char c;
//we can overload assignment operator to copy field.
void operator = ( struct first& f)
i=f.i;
c=f.c;
}
int main()
{
struct first f;
f.i=100;
f.c='a';
struct second s=f;
}
Но я получаю ошибку компиляции. ошибка: запрошено преобразование из "первого" в нескалярный тип "второй".
Не уверен, если это возможно.
2 ответа
Вам нужен конструктор, чтобы использовать
struct second s=f;
такие как:
struct second{
int i;
char c;
second(first const& f) : i(f.i), c(f.c) {}
...
};
Чтобы использовать оператор присваивания, используйте:
second s; // No need to use struct in C++
s = f;
Кстати, правильный интерфейс и реализация для operator=
функция должна быть:
second& operator=(first const& f)
{
i=f.i;
c=f.c;
return *this;
}
Использовать следующим образом. Тогда это будет работать. Или создайте копию конструктора.
#include <iostream>
using namespace std;
struct first{
int i;
char c;
};
struct second{
int i;
char c;
//we can overload assignment operator to copy field.
void operator = ( struct first& f)
{
i=f.i;
c=f.c;
}
};
int main()
{
struct first f;
f.i=100;
f.c='a';
struct second s;
s=f;
}