#include "stdafx.h" using namespace System; value struct Point { public: int x, y; Point() { x = 0; y = 0; } };
Problem of struct default constructor in vc++2005 beta1란 토론이 있는데, 위의 코드를 실행하니까 Error 1 error C3417: ‘Point :: Point’ : value types cannot contain user-defined special member functions란 오류가 뜨더란 이야기다. 별 이야기는 아니니까 바로 결론을 말하자면, 이건 CLR 명세에 따른 오류다. 값 타입은 무조건 0으로 초기화되며 사용자 정의 생성자를 갖지 못한다. 만약 생성자 역할을 해줄 뭔가가 필요하다면 이렇게 하면 된다.
#include "stdafx.h" using namespace System; value struct Point { public: int x, y; Point New() { Point point; point.x = 1; point.y = 2; return point; } };
어라, 정리해놓고 보니 C#쪽에선 사용자 정의 생성자가 들어가도 되네. C++/CLI에만 해당하는 이야긴가? 좀더 자세히 알아봐야겠다.
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
c#과 마찬가지로 c++/cli에서도 인자가 있는 생성자는 정의가 가능합니다.
value struct Point
{
public:
int x, y;
Point(int _x, int _y) {
x = _x;
y = _y;
}
};
마찬가지로, c#에서도 인자가 없는 struct 생성자는 불가능 합니다.
결론은, c#와 c++/cli 모두 값 객체에 있어 기본 생성자의 정의는 불가능하고, 인자가 있는 생성자의 정의는 가능합니다.
맞습니다. 됩니다. -_-;;
문제가 생겼을 때 바로바로 정리해놔야 이런 실수를 안 하는데 말입니다. 수고를 덜어주셔서 감사합니다.