2017-04-07 2 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

초기화! = 할당. 'first'를 인수로 취하는'second'에 대한 생성자를 쓰거나 'first'에서'second'에 변환 연산자를 씁니다. –

+0

당신은 캐스트 - 쓰 - 유니온 관용구를 사용할 수 있으며 또한 컴파일러가 코드를 손상시킬 수있는 앨리어싱 최적화를 수행하지 않도록합니다. 아니면 그냥 memcpy, 아주 무차별 한 힘. –

답변

1

다음과 같이 사용하십시오. 그 때 그것은 작동 할 것이다. 또는 복사 생성자를 생성하십시오.

second s; // No need to use struct in C++ 
s = f; 

BTW, 적절한 인터페이스 :

struct second{ 
    int i; 
    char c; 
    second(first const& f) : i(f.i), c(f.c) {} 

    ... 

}; 

는 대입 연산자, 사용을 사용하려면 :

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

등으로 사용할 생성자가 필요합니다에 대한 구현 및 구현함수는 다음과 같아야합니다.

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

신속하고 유용한 답장을 보내 주셔서 감사합니다. 나의 나쁜 것은, 그것이 임무 다. 그러나 그 사본 :)을 알아 들었다. – user2761565

관련 문제