[VC++]To, na co pokazuje wskaźnik

0

Witam, zawsze miałem pewne trudności ze wskaźnikami, i teraz trafiłem na coś, czego nie mogę przeskoczyć. Weźmy sobie, dajmy na to, taki kawałek kodu (w zarządzanym, .Netowym C++):

Vertex.h:

#pragma once

#include "..\Math\Vector.h"

//reprezentuje punkt (wierzchołek) w przestrzeni

ref class Vertex
{
	Vector ^ coords; //współrzędne wierzchołka	

public:
	Vector ^ GetCoords(); //------------------------------INTERESUJĄCA MNIE LINIJKA

	Vertex(Vector ^ newCoords); //konstruktor

Vertex.cpp:

#include "Vertex.h"

Vector ^ Vertex::GetCoords() //-----------------------------INTERESUJĄCA MNIE LINIJKA
{
	return coords;
}

Vertex::Vertex(Vector ^ newCoords)
{
	coords = newCoords;
}

Vector jest inną klasą którą sobie napisałem, nieistotne co w niej jest.

Chodzi o tę funkcję GetCoords. W zamierzeniu jest ona po to, aby ktoś używając obiektu klasy Vertex, mógł odczytać współrzędne tego wierzchołka, ale nie mógł ich sobie zmienić. Tylko z tego co wiem o wskaźnikach, wydaje mi się, że jeżeli zwracam wskaźnik na Vector (Vector ^) reprezentujący te współrzędne, to potem ten ktoś ma dostęp nie do kopii wektora, ale do niego samego. A mnie zależy właśnie na zwróceniu nie wskaźnika na ten wektor, ale kopii tego, na co pokazuje wskaźnik. O ile się nie mylę, w normalnym C++ wyglądałoby to tak:

Vector * coords; //Niezarządzany wskaźnik na Vector

Vector GetCoords(); //Deklaracja


Vector Vertex::GetCoords() //Definicja
{
	return * coords; //To, na co pokazuje wskaźnik
}

Ale gdy próbuję coś takiego zrobić w zarządzanym C++ (czyli * zamieniam na ^), kompilator zwraca mi błędy:

error C3192: syntax error : '^' is not a prefix operator (did you mean '*'?)
error C3073: 'Vector' : ref class does not have a user-defined copy constructor

Wklepałem to 1. w MSDNa, wyszło mi że przy odniesieniu do tego, na co pokazuje wskaźnik powinienem i tak użyć *, mimo że to wskaźnik ^. Ale jak to robię, to i tak zostaje mi ten drugi błąd (C3073). I nie mogę zrozumieć co ma do tego konstruktor kopiujący...

0

O.o chyba mam, ale nie wiem czy to to.

Napisałem sobie ten konstruktor kopiujący dla wektora, ale dalej mi sypało błędami, pluło się na operator referencji (&):

Vector::Vector(Vector &)
{
}

To powpisywałem w MSDNa parę błędów, które mi powychodziły, i doprowadziło mnie to do czegoś takiego:

Vector::Vector(Vector %)
{
}

Nie mam pojęcia co to znaczy i jak to działa, ale grunt że dzięki temu Vertex nie sypie błędami...
Mogę tylko podejrzewać że % to operator referencji zarządzanej albo coś takiego.

Przydałyby się jakieś wyjaśnienia.

0

Od dawna trzymam sobie adres do pewnego posta na tym forum (do skorzystania gdy wreszcie się zabiorę do nauki C++\Clr) - może tobie też pomoże.

http://4programmers.net/Forum/C_i_C++/164863-Referencja_do_zmiennej_globalnej_.net?p=660232#id660232

0

Napisałem sobie ten konstruktor kopiujący dla wektora, ale dalej mi sypało błędami, pluło się na operator referencji (&):
Vector::Vector(Vector &)

Prawie dobrze, wystarczyło zrobić

Vector::Vector(Vector^)

i tyle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1