2010-02-25 33 views
5

Tôi có một lớp trông xấp xỉ như thế này:C++ sử dụng 'này' như một tham số

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(this, x, y); 
    } 
private: 
    points[x*y]; 
} 

Tôi muốn thực hiện một lớp đại diện cho một "Neo" điểm có thể được tiếp cận với Mesh và sửa đổi điểm, như thế này:

class Anchor 
{ 
public: 
    Anchor(&MeshClass, x, y) 
    moveAnchor(x, y); 
} 

vấn đề là khi tôi cố gắng để làm cho Anchor trong MeshClass::getAnchorPoint phương pháp, một cái gì đó giống như return Anchor(this, x, y) nhưng vì this là const tôi không thể. Như một giải pháp cho đến khi tôi nhận được điều này, tôi đã Anchor chấp nhận một tham chiếu đến điểm và di chuyểnAnchor di chuyển điểm trực tiếp.

Chỉnh sửa: Vấn đề rất có thể là điều gì đó ngu ngốc tôi đã làm khi cố gắng sử dụng Tham chiếu. Tôi đã thay đổi để sử dụng một con trỏ như tôi thường và tôi có thể vượt qua trong this mà không có khiếu nại từ trình biên dịch. Tôi gần như chắc chắn tôi đã nhận được một lỗi liên quan đến const này, nhưng tôi không thể tái tạo nó vì vậy tôi phải chỉ ra khỏi tâm trí của tôi.

+0

Hi, đối với tôi bạn không cho rằng để biên dịch ... nó? –

+1

Nó có lẽ không (chưa) :) Hãy nhớ rằng (ít nhất là trong đồng bằng cũ C), nếu loại không được chỉ định, nó mặc định để int, nhưng ném một cảnh báo. –

+2

Vui lòng đăng mã thực tế bạn muốn sử dụng và lỗi mà nó tạo ra. (Không phải cách bạn cố gắng khắc phục lỗi đó.) Hiện tại, bạn khó có thể đoán được bạn đang cố gắng làm gì. –

Trả lời

8

Trong C++, đây là một con trỏ, không phải là tham chiếu. Bạn có thể làm một cái gì đó như thế này:

class Anchor; //forward declaration 

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(int x, int y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    int points[WIDTH*HEIGHT]; 
} 

class Anchor 
{ 
public: 
    Anchor(MeshClass &mc, int x, int y); 
} 
+0

Đây có lẽ là vấn đề của tôi. Tôi quyết định có Anchor chấp nhận một con trỏ chứ không phải là một tham chiếu, trong trường hợp này 'this' bây giờ có vẻ hoạt động tốt như một tham số. – Winder

1

Tại sao bạn nghĩ this là const? this là một con trỏ, không phải là tham chiếu. Không phải là return Anchor(*this, x, y);?

+0

Về mặt kỹ thuật, đây thực sự là _is_ const, * điều này là không. – Joel

+0

Về mặt kỹ thuật, 'this' không đủ điều kiện. Nó không thể sửa đổi được vì nó là một giá trị, không phải vì nó là const. Điều này có nghĩa là 'this' có kiểu' Class * ', nhưng * không *' Class * const'. –

0

Bạn có thể thay đổi Neo để chấp nhận tham số const MeshClass& hoặc đúc này làm (MeshClass) khi tạo neo không? Tôi không chắc chắn liệu người ta có thể sử dụng const_cast<MeshClass>(this) để xóa constness của this.

2

Các constness của này không phải là một vấn đề. Con trỏ chính nó là const, không phải là giá trị nó trỏ đến.

vấn đề thực sự của bạn là đây:

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    points[x*y]; 
} 
Các vấn đề liên quan