|
exkarion 님이 쓰신 글 :
: 안녕하세요...허접 C++ 유접니다. ^^
:
: 만약 tm 이라는 구조체가 있는데.....
:
: tm start; // 이미 데이터가 들어 있는 구조체 변수
:
: tm tm_array[5]; // 배열을 선언
:
: tm_array[0] = start; // 이렇게 하면 당연히 '=' 의 오버로딩이 없어서 제대로 할당이 안됩니다.
아닙니다. 제대로 대입되어야 맞습니다.
struct tm {
int a, b;
};
tm tm1, tm2;
// 중간 생략
tm1 = tm2;
라고 하면,
tm1.a = tm2.a;
tm1.b = tm2.b;
라고 한 것과 동일한 결과입니다.
: 그래서 생각한것이 valarray<tm> ㅡ.ㅡ;;;
:
: valarray<tm> tm_array[5];
선언이 틀렸습니다.
valarray<double> values(5); // [5]가 아닙니다!
와 같이 해야 합니다.
valarray는 ANSI C++ 라이브러리에 있는 클래스이지만,
STL 컨테이너는 아닙니다.
valarray는 'value array', 즉 정수나 실수만을 넣을 수 있는 컨테이너입니다.
또한 반복자(iterator)도 지원하지 않기 때문에 STL의 generic algorithm도 사용할 수 없죠.
valarray는 자체에서 지원하는 수학 계산용 멤버함수(sin, cos, tan 등)를 쓰는 것이 목적입니다.
님이 원하시는 대로 구조체를 원소로 가지려면,
vector 컨테이너를 사용하셔야 합니다.
vector<tm> tm_vector(5); // 여기서도 [5]가 아니라 (5)로 써야 합니다.
: tm_array[0] = start; // 컴파일에서 에러는 안납니다만.....
:
: tm_array[0]의 원소가 struct tm 의 원소가 나오질 않습니다......ㅡ.ㅡ;;;
:
: 어설프게 궁리한 탓인지.....제대로 안되는군요.....
:
: 혹시 방법이 있다면 알려주시길....
:
: 아님 그냥 1:1 로 카피하는 함수를 만들던지 해야겠군요.....ㅡ.ㅡ;;;
|