2011-01-28 3 views
0

이 코드의 문제점을 알려주는 누군가가 필요합니다. 나는 그것이 무엇이 잘못되었는지를 모른다. 코드가 의미있는 일을하지 않으며 사용할 수 없다는 것을 알고 있습니다. 나는 복사 생성자가 어떻게 작동 하는지를 알기 위해서만 그것을 만들었다.복사 생성자 오류

class test 
{ 
    public: 

    int* value; 

    public: 

    int getvalue() 
    {return *value;}; 

    test(int x){ value = new int(x);}; 

    test(const test& a) 
    { 
     value=new int; 

     *value = a.getvalue(); 
    }; 
}; 
+2

정말 포인터를 사용하고 싶습니까? –

답변

2

당신은, int getvalue() constgetvalue()의 선언을 변경해야합니다.

1

표기가 있습니다. 각 메소드 정의 이후에 컴파일되지 않습니다.

class test { public: 

int* value; 

public: 

int getvalue() 
{return *value;} 

test(int x){ value= new int(x);} 

test(const test& a) 
{ 
    value=new int; 

    *value = a.getvalue(); 
} 


}; 

또한 '테스트'를 클래스 이름으로 사용하지 마십시오. 매크로 나 다른 스카프 이름 일 수도있는 플랫폼에 따라 다릅니다. "MyTest"또는 일부 사용하십시오.

+0

이 솔루션은 getvalue()를 const 멤버 함수로 선언하고 있습니다. 하지만 고맙습니다. 나는 여분의 것을 많이 넣었습니다. 내 코드에서. : D : D –

0

는 내가 마지막으로 C를 쓴 이후 ++ 오랜 시간이 있지만, 여기가는 것 :

난 당신이 int 형 포인터로 값을 선언하는 이유를 잘 모르겠어요; 그걸 int로 만들려고 한거야? 당신이 당신의 복사 생성자에서 const를 참조에 getvalue()를 호출 위해 노력하고 있기 때문에

class test 
{ 
    private: 

     int value; 

    public: 

     test(int x) 
     { 
      value = new int(x); 
     } 

     int getValue() 
     { 
      return value; 
     } 

     test(const test & a) 
     { 
      value = a.getValue(); 
     } 
}; 
+0

그런 다음 새로운 것을 꺼내십시오. –

+0

나는 내 코드가 학습 목적을 위해 아무것도하지 않는다는 것을 안다. 그 라인은 "int = new int (x)"컴파일되지 않습니다. 고맙습니다. –

0

(OP 대신 게시 됨).

getvalue() 함수를 const로 만들려고했는데 효과가있었습니다. 문제는 내가 const 참조로 테스트 클래스를 통과했고 컴파일러가 getvalue() 함수를 선언하지 않았기 때문에 함수가 그 참조에서 무언가를 변경하려고한다고 생각했기 때문입니다.