Hej,
Próbowałem w Visual C++ stworzyć implementację wektora w 3d. Napisałem zarządzaną klasę Vector - przedstawiony jako dynamiczna tablica trzech współrzędnych. Przeciążyłem kilka operatorów aby mieć podstawowe operacje na wektorach.
Plik nagłówkowy Vector.h:
#pragma once
ref class Vector
{
double ^ elements;
public:
double Elements(int i);
Vector(double x, double y, double z);
Vector ^ operator+(Vector u);
Vector ^ operator-(Vector u);
Vector ^ operator*(double a);
double operator*(Vector u);
Vector ^ operator/(Vector u);
};
plik główny klasy Vector.cpp:
#include "Vector.h"
Vector::Vector(double x, double y, double z)
{
elements = gcnew double[3];
elements[0] = x;
elements[1] = y;
elements[2] = z;
}
Vector ^ Vector::operator+(Vector u)
{
return gcnew Vector(elements[0] + u.elements[0], elements[1] + u.elements[1], elements[2] + u.elements[2]);
}
Vector ^ Vector::operator-(Vector u)
{
return gcnew Vector(elements[0] - u.elements[0], elements[1] - u.elements[1], elements[2] - u.elements[2]);
}
Vector ^ Vector::operator*(double a)
{
return gcnew Vector(elements[0] * a, elements[1] * a, elements[2] * a);
}
double Vector::operator*(Vector u)
{
return elements[0] * u.elements[0] + elements[1] * u.elements[1] + elements[2] * u.elements[2];
}
Vector ^ Vector::operator/(Vector u)
{
return gcnew Vector(
elements[1] * u.elements[2] - elements[2] * u.elements[1],
elements[2] * u.elements[0] - elements[0] * u.elements[2],
elements[0] * u.elements[1] - elements[1] * u.elements[0]);
}
I dostaję 36 błędów - po jednym dla każdego odniesienia do elementu tej tablicy, każdy taki sam:
error C3915: 'System::Double' has no default indexed property (class indexer)
Nie mogę rozkminić o co chodzi. Domyślam się że coś jest nie tak że użyłem zarządzanego wskaźnika tak, jak zwykłego wskaźnika do stworzenia tablicy dynamicznej:
double * t = new double[n];
double ^ T = new double[n]
a to niekoniecznie może być właściwe w .NETcie
Szukałem po necie rozwiązania tego problemu, jak właściwie mam zrobić zarządzaną tablicę cały dzień... nie znalazłem rozwiązania.