2011-08-11 54 views
8

Tôi chưa hiểu rõ các tham chiếu và tham chiếu, nhưng tôi có một lớp với các phương thức tĩnh và các biến sẽ được tham chiếu từ các lớp chính và các lớp khác. Tôi có một biến được xác định trong main() mà tôi muốn chuyển đến một biến trong lớp này với các hàm tĩnh. Tôi muốn các hàm đó thay đổi giá trị của biến được nhìn thấy trong phạm vi main().Lớp C++ với con trỏ tĩnh

Đây là một ví dụ về những gì tôi đang cố gắng để làm, nhưng tôi nhận được lỗi biên dịch ...

class foo 
{ 
    public: 

    static int *myPtr; 

    bool somfunction() { 
     *myPtr = 1; 
     return true; 
    } 
}; 

int main() 
{ 
    int flag = 0; 
    foo::myPtr = &flag; 

    return 0; 
} 
+11

Theo quy tắc, bất cứ khi nào bạn gặp lỗi trình biên dịch, _always_ bao gồm chúng trong câu hỏi. –

Trả lời

15

Cung cấp định nghĩa của biến tĩnh bên ngoài lớp học như:

//foo.h 
class foo 
{ 
    public: 

    static int *myPtr; //its just a declaration, not a definition! 

    bool somfunction() { 
     *myPtr = 1; 
     //where is return statement? 
    } 
}; //<------------- you also forgot the semicolon 


///////////////////////////////////////////////////////////////// 
//foo.cpp 
#include "foo.h" //must include this! 

int *foo::myPtr; //its a definition 

Bên cạnh đó, bạn cũng quên dấu chấm phẩy như được nêu trong chú thích ở trên và somefunction cần trả lại giá trị bool.

+0

'foo :: somfunction' cũng cần trả lại giá trị – Praetorian

+0

Tôi nhận được lỗi sau: sử dụng không hợp lệ tên đủ điều kiện 'foo :: myPtr' – Brian

+0

@Brian: Làm như tôi đã nói. Bạn sẽ không nhận được bất kỳ lỗi nào sau đó. – Nawaz

0
#include <iostream> 
using namespace std; 

class foo 
{ 
public: 

static int *myPtr; 

bool somfunction() { 
    *myPtr = 1; 
    return true; 
} 
}; 
////////////////////////////////////////////////// 
int* foo::myPtr=new int(5);  //You forgot to initialize a static data member 
////////////////////////////////////////////////// 
int main() 
{ 
int flag = 0; 
foo::myPtr = &flag; 
return 0; 
} 
+0

Trong khi mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về cách thức và/hoặc lý do giải thích vấn đề này sẽ cải thiện giá trị lâu dài của câu trả lời. Vui lòng đọc [cách trả lời] này (http://stackoverflow.com/help/how-to-answer) để cung cấp câu trả lời có chất lượng. – thewaywewere