Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi khó hiểu về con trỏ this trong C++

    Chào mọi người!
    Mình có 2 class như sau:
    Class A:

    Mã:
    class A{public:    B* data;    A(void);    ~A(void);};A::A(void){    this->data = new B(this);//dòng này bị lỗi}A::~A(void){}
    Class B:

    Mã:
    class B{public:    B(A* data);    ~B(void);    A* parent;    }; B::B(A* _parent){    this->parent = parent;}  B::~B(void){}
    Khi tạo một class A mình nhận được một lỗi rất khó hiểu về con trỏ this. Làm sao để sử dụng được con trỏ this trong trường hợp này mọi người?
    Tks all!
    PS: code trên visual studio

  2. #2
    Đây là dạng tham khảo chéo giữa các phương thức của 2 lớp.
    Cách sau đây mình thường dùng khi gặp các trường hợp tương tự:

    Mã:
    // ..............class A;        // Khai báo trước lớp Aclass B;        // Khai báo trước lớp B class A{public:    B* data;    A(void);    ~A(void);}; class B{public:    B(A* data);    ~B(void);    A* parent;   }; // Cài đặt cho lớp AA::A(void){    this->data = new B(this);   //dòng này bị lỗi // Sẽ hết lỗi ở đây}A::~A(void){}// Cài đặt cho lớp BB::B(A* _parent){    this->parent = parent;}B::~B(void){}
    Nếu ở hai tập tin riêng biệt, bạn phải chắc chắn rằng tập tin .cpp của mỗi lớp đều phải đưa vào cả 2 tập tin .h
    Thân .

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình tạo 2 class bằng Winzard, Không hiểu câu cuối lắm. mình đã include các file header cần thiết vào rồi.

    - - - Nội dung đã được cập nhật ngày 12-09-2014 lúc 07:36 PM - - -

    Giờ mới biết cái này. Cảm ơn bạn rất nhiều lắm [IMG]images/smilies/applause.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nếu tạo bằng Wizard cho 2 lớp, và nếu đã include tập tin .h của lớp kia vào rồi, thì chỉ cấn thêm khai báo giữ chỗ cho trình biên dịch thôi.
    Tập tin A.h như sau

    Mã:
    #pragma once#include"B.h"class B;class A{public:    B* data;    A(void);    ~A(void);};
    Tập tin A.cpp như sau

    Mã:
    #include "A.h"#include "B.h" A::A(void){     this->data = new B(this);}A::~A(void){}
    Tập tin B.h như sau

    Mã:
    #pragma once#include "A.h"class A;class B{public:    B(A* data);    ~B(void);    A* parent;};
    Và tập tin B.cpp như sau

    Mã:
    #include "B.h"#include "A.h" B::B(A* _parent){    this->parent = parent;}B::~B(void){}

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •