C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
下記のように Point3CLI0a, MyPoint3a を前方参照すれば、ビルドできます。
- Visual Studio 2026 18.4.3
修正)
- ソースが壊れていたので修正しました。
- またPoint3CLI0aの前方参照は不要なのでコメントにしました。
- MyPoint3aの本体を外出しするのもやめました。
#include "pch.h"
using namespace System;
//value struct Point3CLI0a; // 不要
// C2061,C3417 error 対応
value struct MyPoint3a;
public value struct Point3CLI0a {
public:
float x, y, z;
// C2027 error 対応
Point3CLI0a(MyPoint3a _p, UInt32 u1, float magnification);
};
public value struct MyPoint3a {
public:
float x, y, z;
// MyPoint3a(Point3CLI0a p0); 不要
MyPoint3a(Point3CLI0a p0) { x = p0.x; y = p0.y; z = p0.z; }
};
// MyPoint3a::MyPoint3a(Point3CLI0a p0) { x = p0.x; y = p0.y; z = p0.z; } 不要
// C2027 error 対応
Point3CLI0a::Point3CLI0a(MyPoint3a _p, UInt32 u1, float magnification)
{
unsigned long* upx, * upy, * upz;
upx = reinterpret_cast<unsigned long*>(&_p.x);
*upx &= u1;
upy = reinterpret_cast<unsigned long*>(&_p.y);
*upy &= u1;
upz = reinterpret_cast<unsigned long*>(&_p.z);
*upz &= u1;
x = _p.x * magnification; y = _p.y * magnification; z = _p.z * magnification;
}
int main(array<System::String^>^ args)
{
Point3CLI0a a1;
a1.x = 1;
a1.y = 2;
a1.z = 3;
MyPoint3a a2(a1);
Console::WriteLine("a2 x = {0} y = {1} z = {2}", a2.x, a2.y, a2.z);
Point3CLI0a a1a(a2, 1u, 2.0);
Console::WriteLine("a1a x = {0} y = {1} z = {2}", a1a.x, a1a.y, a1a.z);
return 0;
}
テスト結果です。(2行目は期待と違うようなので、デバッグで確認してください)
a2 x = 1 y = 2 z = 3
a1a x = 0 y = 0 z = 0