2016-12-18 3 views
-2

private 멤버 배열을 사용하여 클래스 (foo)를 만들려고합니다. 이 클래스는, 배열이 초기화되는 constructor 내의 다른 클래스 (foo2)의 private 멤버로서 사용됩니다.C++ 초기화 멤버 배열

example.h :

class foo{ 
private: 
    int* ary; 
public: 
    foo(int*); 
    ~foo(); 
} 

example.cpp :

foo::foo(int* b){ 
ary = b; 
} 

useOfExample.h

class foo2{ 
private: 
    foo my_foo; 
public: 
    foo2(); 
    ~foo2(); 
} 

useOfExample.cpp

foo2::foo2() : myfoo({2,3}){} 
,617,

나는 C++에서 멍청한 놈이다. 나는 정말로 명확하지 않을 수도 있다는 것을 깨닫는다. 그래서 다른 말로하면 foo2는 foo2가 배열이 [2,3]으로 설정 될 필요가있다.

+1

그건 배열이 아니에요, 그것은 정수로의 포인터입니다 (나는 거의 같은 것으로 취급 할 수 있습니다). 왜 당신은 STL 클래스를 사용할 수있을 때 C++의 포인터에 대해이 끔찍한 일을합니까? 확인하지 않고'{2,3}'의 범위를 알고 있습니까? 'myfoo'가 여전히 그것을 가리키고있는 동안 범위를 벗어날 수 있습니까? – John3136

+1

배열은 포인터가 아니며 포인터는 배열이 아니며 C++의 표준 동적 배열은'std :: vector'입니다. 그걸 사용해야합니다. 당신이 할 수 없다면, 당신은 실제로 당신이 여기서해야 할 일을 파악하기 위해 당신의 코스 자료 (또는 당신이 배우는 무엇이든지)를 검토 할 필요가 있습니다. –

+0

'int * ary;'=>'int ary [2];'또는'std :: array ary;'. 그런 다음 초기화되지 않은 포인터가 아닌 배열이됩니다. –

답변

0

것은 살펴 보자 Static array vs. dynamic array in C++

당신은 동적 배열을 초기화 {...} 구문을 사용할 수 있습니다; 수동으로 작성해야합니다.

+0

대답을 주셔서 감사합니다, 나는 그것을 할 수 있다고 생각했기 때문에 나는 정수를 초기화 할 때와 같이 뭔가를 지정하고 있다고 믿었 기 때문에 그것이 가능할 것이라고 생각했다. . – loogikos