2012-03-08 6 views
1

저는 학교 프로젝트를 진행하고 있으며 막 다른 골목에 섰습니다. 프로젝트의 일부에는 배열을 사용하는 클래스가 있어야합니다. 우리는 배열을 사용해야합니다 (슬프게도 벡터를 사용할 수 없습니다). 나는 런타임에 클래스에 배열을 만드는 방법을 알아 내려고하고있다. 실제로 처음에 아무것도 넣을 필요가 없습니다. 배열을 특정 크기로 만들려면 생성자가 필요합니다. 어떤 피드백이나 도움도 대단히 감사하겠습니다. 여기 클래스와 생성자에 대해 제가 지금까지 가지고있는 것이 있습니다. 이 프로젝트는 C++로 완성되었습니다.클래스 생성자 및 배열

#pragma once 
#include <iostream> 
#include <string> 
using namespace std; 

class Node 
{ 

public: 
    int size; 
    string container[]; 

    Node (int s, string c[]); 
}; 

Node::Node (int s, string c[]) 
{ 
    size=s; 
     ***I need something here that will give string container[] the size of "size"*** 
} 

감사합니다.

class Node 
{ 

public: 
    int size; 
    string* container; 

    Node (int s, string c[]) 
    { 
     container = new string[s]; 
     //copy c to container 
    } 
    ~Node() 
    { 
     delete[] container; 
    } 
}; 

또한, 소멸자에서 메모리를 해제하는 것을 잊지 :

+0

"슬프게도 우리는 벡터를 사용할 수 없습니다."- 거기서 도망 가세요. – Xeo

+1

@Xeo : 어느 시점에서, 그들은'new' 배열과'delete' 배열을 사용하는 법을 배워야합니다. C++로 코딩하는 법을 STL 없이는 쓸모가 없다면 누군가에게 가르쳐 준다고 말할 수는 없습니다. – StilesCrisis

+0

@trutheality :'calloc'은 여기서 도움이되지 않습니다. – StilesCrisis

답변

1

당신은 동적으로 할당 된 배열이 필요합니다.

+0

그리고 [Rule of Three] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)를 잊지 마십시오. – Xeo

-1
class Node 
{ 

public: 
    int size; 
    string* container; 

    Node (int s, string c[]); 
    ~Node() { if (container != NULL) delete [] container; } 
}; 

Node::Node (int s, string c[]) : container(NULL) 
{ 
    size=s; 
    container = new string[size]; 
    // Copy list values into container 
} 
+0

왜'if (container! = NULL)'입니까? 그리고 왜 당신은 이니셜 라이저 목록에서'container'를 NULL에 할당하고 있습니까? –

+0

NULL을 확인하지 않는 이유는 무엇입니까? 그가 나중에 생성자를 추가하기 위해 코드를 변경하고 목록을 초기화하지 않으면 어떻게 될까요? 할당이 실패하면 어떻게 될까요? –

+0

할당에 실패하면 예외가 발생하고 개체가 생성되지 않으므로 소멸자가 호출되지 않습니다. (내가 오늘 밤에 끔찍한 기억을 잃지 않는다면 ....) 실제로 걱정할 것은 할당이 성공하지만 * 예외는 나중에 생성자에서 발생합니다. – Hurkyl

0

포인터를 사용합니다. 당신이 크기를 얻었을 때 그 크기로 새로운 것을 부르면됩니다.

char* myArray; 

constructor(int size) { 
    myArray = new char[size]; 
} 

소멸자에서도 delete를 호출해야합니다.

+0

이것은 완벽하게 작동했습니다. 정말 고맙습니다! – user1185736

관련 문제