2014-12-19 4 views
-1
class A{ 
    static queue x; 
    void operateOnQueue() 
    { 
     x.push(something); 
    } 
} 

class B{ 
    void getOtherClassQueueSize() 
    { 
     A *a= new A(); 
     cout<<a->x.size()<<endl; \\ size of queue is 1 
     // OR alternatively 
     cout<<A::x.size()<<endl; 
     delete(a); 
    } 
} 

Как я могу получить доступ к той же очереди класса A класса B в getOtherClassQueueSize(), не делая его статическим? Не делая его статическим, я получу size = 0. Есть ли какое-нибудь обходное решение?доступ к переменной класса из другого класса без статического статического класса

Эти функции работают в потоках, чтобы поддерживать параллельность. Другой способ - передать аргументы функции, но я стараюсь избегать этого.

+0

Ваш 'класс A' не является статическим, а членом' x' является. У вас есть ответ в вопросе. – harper

+1

Не могли бы вы высказать * код *. Ключевое слово 'Class' не существует. – harper

+1

Что вы подразумеваете под '\\ size is 1'? BTW: это недопустимый синтаксис C++. Откуда это «что-то»? – Wolf

ответ

0

как насчет того, чтобы просто не сделать x статическим? тогда, если ее общественность вы можете получить доступ к нему через указатель, как:

//assume 'a' points to an object who's stack has already been filled somewhere else, then: 
cout << a->x.size(); //prints the size of member 'x' of 'a' 

или вы можете сделать его приватным и подвергать геттер/сеттер или другие модификаторы

0

если статический не вариант, и у вас есть для доступа к очереди через экземпляры A может быть возможность инициализации obj класса A со ссылкой или указателем на один экземпляр очереди. Вы также можете попытаться заполнить карту, где ключ каким-то образом вытекает из типа, и один экземпляр для каждого типа является значением.

два примера, в том числе оригинала приведены здесь: online example

Короче:

инициализации OBJ-х класса А, со ссылкой или указателем на один экземпляр очереди:

std::deque<int> global_x; 
struct Anew{ 
    std::deque<int>& x; 
    Anew() : x(global_x) {} 
}; 

заполнить карту, где ключ каким-то образом получен из типа, а один экземпляр для каждого типа - это значение:

std::map<int, std::deque<int> > mapxs; 
struct Anew2{ 
    enum { type_as_int_so_no_rtti_is_needed = 1 }; 
    std::deque<int>& x; 
    Anew2() : x(mapxs[type_as_int_so_no_rtti_is_needed]) {} 
}; 
Смежные вопросы