2017-04-07 107 views
0

我的需求是将相似的结构分配给另一个,只是名称不同。 如果它的名字相同,我们可以直接使用=(赋值)。 我不想使用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; 
} 

但我得到编译错误。 错误:请求从“第一个”转换为非标量类型“第二个”。

不确定是否有可能。

+1

在这里,你不分配。您正在复制对象。所以复制构造函数需要 –

+0

初始化!=赋值。写一个'second'的构造函数,将'first'作为参数,或者写一个转换运算符,'second','first'。 –

+0

你可以使用cast-through-a-union成语,也可以确保编译器不会做任何可能会破坏你的代码的别名优化。或者只是memcpy,非常暴力。 –

回答

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

你需要一个构造函数来使用

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; 
} 
+0

感谢您的回复。 我的不好,已经记住它是任务,但它的副本:)。 – user2761565

相关问题