2014-04-11 3 views
0

클래스에 대한 할당이 있고 헤더 파일을 받았으며 클래스의 메서드를 구현해야합니다. 복사 생성자를 구현하고 = 연산자를 오버로드하는 데 문제가 있습니다. 다음 헤더 파일의 일부는 다음과 같습니다복사 생성자 오버로드 연산자

class MontaznaKuca 
{ 
private: 
    double kvadratura; 
    string bojaFasade; 
    string vlasnik; 
    bool postojiVrt; 
    Kuhinja* kuhinja; 
    vector<Soba*> sobe; //Soba is a seperate class defined in another header 
public: 
    MontaznaKuca(void); 
    MontaznaKuca(double kvadratura, string bojaFasade, string imaVrt); 
    MontaznaKuca(const MontaznaKuca& kuca); 
    ~MontaznaKuca(void); 

    MontaznaKuca& operator=(const MontaznaKuca& kuca); 
... 

내 시도가 복사 생성자를 먹고 = 연산자가

MontaznaKuca::MontaznaKuca(const MontaznaKuca& kuca) : sobe(kuca.sobe.size()) 
{ 
    kvadratura = kuca.kvadratura; 
    bojaFasade = kuca.bojaFasade; 
    vlasnik = kuca.vlasnik; 
    postojiVrt = kuca.postojiVrt; 
    kuhinja = new Kuhinja; 
    kuhinja = kuca.kuhinja; 
    for (size_t i = 0; i < kuca.sobe.size(); ++i) 
     sobe[i] = new Soba(*kuca.sobe[i]); 

} 

MontaznaKuca& MontaznaKuca::operator=(const MontaznaKuca& kuca) : sobe(kuca.sobe.size()) 
{ 
    kvadratura = kuca.kvadratura; 
    bojaFasade = kuca.bojaFasade; 
    vlasnik = kuca.vlasnik; 
    postojiVrt = kuca.postojiVrt; 
    kuhinja = new Kuhinja; 
    kuhinja = kuca.kuhinja; 
    for (size_t i = 0; i < kuca.sobe.size(); ++i) 
     sobe[i] = new Soba(*kuca.sobe[i]); 
    return *this; 
} 

나는 웹 및 Visual Studio에 대한 몇 가지 코드를 공부하여 이런 짓을

에 과부하가 나에게 오류를 제공

: constructor initializer lists are only allowed on constructor definitions 

내가 완전히 잃어 버렸기 때문에 누군가이 두 가지 기능을 수행하는 방법을 설명 할 수 있습니까?

답변

0

컴파일러에서 오류가 발생했습니다. 생성자 초기화 프로그램 목록은 생성자 정의에서만 허용됩니다.
복사 생성자를 구현 중이므로 생성자 초기화 목록을 사용할 수 없으며 대입 연산자를 오버로드 할 때 생성자에서만 사용할 수 있습니다. 다음 게시물을 읽어 보시기 바랍니다. Copy constructor and = operator overload in C++: is a common function possible?What is the copy-and-swap idiom?

MontaznaKuca::MontaznaKuca(const MontaznaKuca& kuca) 
{ 
    kvadratura = kuca.kvadratura; 
    bojaFasade = kuca.bojaFasade; 
    vlasnik = kuca.vlasnik; 
    postojiVrt = kuca.postojiVrt; 
    kuhinja = new Kuhinja; 
    kuhinja = kuca.kuhinja; 

    for (size_t i = 0; i < kuca.sobe.size(); ++i) 
     sobe.push_back(new Soba(*kuca.sobe[i])); 
} 

MontaznaKuca& MontaznaKuca::operator=(const MontaznaKuca& kuca) 
{ 
    // copy-swap idiom is a better approach. 
    kvadratura = kuca.kvadratura; 
    bojaFasade = kuca.bojaFasade; 
    vlasnik = kuca.vlasnik; 
    postojiVrt = kuca.postojiVrt; 
    delete kuhinja; //deallocate old memory 
    kuhinja = new Kuhinja; 
    kuhinja = kuca.kuhinja; 
    // before allocating new memory you need deallocate old memory 
    ... 
    for (size_t i = 0; i < kuca.sobe.size(); ++i) 
     sobe.push_back(new Soba(*kuca.sobe[i])); 
    return *this; 
} 
+0

고맙습니다. 나는 마침내 내가 당신의 코드를 보았을 때 내가 잘못하고있는 것을 깨달았다. 내가 게시하고 많이 배운 게시물을 읽었습니다. 다시 도움을 주셔서 감사합니다. – nixpix