2017-05-14 6 views
0

안녕하세요. 무자비한 커뮤니티입니다.C++ Union/Struct 'printColorPicker :: printColorPicker (void)': 삭제 된 함수를 참조하려고 시도했습니다.

이 오류가 라인 (20)에있는 멍청한 놈의 코드

을 보라하시기 바랍니다 (난 당신이 볼 수 있도록 그것을 언급하겠습니다).

오류 : 'printColorPicker :: printColorPicker (무효)'

#include <iostream> 

    using namespace std; 

    enum availableColors { 
     incolorPrint, 
     colorPrint 
    }; 

    union printColorPicker { 
     struct incolorPrint { 
      int id; 
      char* details = "No color ink eh?"; 
     } i; 

     struct colorPrint{ 
      int id; 
      char* details = "Unicorn mode on"; 
     } c; 
    } color; //line 20 


    void colorPicker(availableColors c){ 
     char* option; 

     switch (c) { 
     case incolorPrint: { 
      option = color.i.details; 
     } 
     break; 

     case colorPrint: { 
      option = color.c.details; 
     } 
     break; 
     } 


     cout << option; 
    } 



    void main(){  
     colorPicker(colorPrint); 
    } 

는 내가 뭘하려고 오전 내/cout을/printf와 문자열 에코 색상 선택기 방법을 사용하는 삭제 기능을 참조하기 위해 시도 구조체 (colorPrint, incolorPrint)는 printColorPicker 유니온 안에 있습니다.

위에서 언급 한 오류가 발생합니다.

+0

그래서 생성자는 인수가없는'union'의 이름을 가져야합니까? –

+0

TBH 필자는 왜 코드에서'union '을 사용하고 있는지 모르겠다. –

+0

숙제입니다. 노동 조합이 요구 사항 중 하나입니다. –

답변

0

나는 현명하지 못하지만 실제로는 기본 생성자를 제공하는 details에 대한 기본값을 제공 할 때 일어날 가능성이 있습니다. 그런 경우 struct은 더 이상 집계 유형이 아니며 POD라고도합니다. 이 비 집계가 전파되고 union도 더 이상 집계 형식이 아니며 따라서 생성 된 삭제 된 기본 생성자를 호출합니다. (집계 유형은 생성자에서 생성자를 호출하여 C 객체와 똑같이 동작하지 않습니다.)

EDIT union은 멤버를 쉽게 구성 할 수 있어야합니다. 기본값을 제공하면 struct은 더 이상 쉽게 구성 할 수 없습니다. 집계 유형이 private/protected 인 회원과의 차이점은 허용됩니다.

이 문제를 해결하는 방법은 details의 기본값을 제거하고 가능하면 팩토리 기능을 통해 생성 한 후 할당하는 것입니다.

union의 다른 객체에 대한 기본값을 설정하는 것은 의미가 없습니다. 어느 값을 사용해야합니까?