是否可以分配两种不同类型的结构?

时间:2017-04-07 07:10:38

标签: c++ structure

我需要将结构分配给另一个类似的结构。只是名字不同。如果它是相同的名称,我们可以直接使用=(赋值)运算符。

我不想使用memcpy(),因为它会复制比特。

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 个答案:

答案 0 :(得分:6)

您需要使用构造函数

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;

BTW,operator=函数的正确接口和实现应该是:

second& operator=(first const& f)
{
   i=f.i;
   c=f.c;
   return *this;
}

答案 1 :(得分:1)

使用如下。然后它会工作。或者创建复制构造函数。

#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; 
}