Можно ли назначить две структуры разного типа?

Мне нужно назначить аналогичную структуру другому, просто имена разные. Если это одноименное имя, мы могли бы использовать =(присваивание) напрямую. Я не хочу использовать 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; 
}
Другие вопросы по тегам