Еррор в данном месте меня привел к шоку, такого я не ожидал... вроде бы как Any находится по иерархии в One, а
значит и должен знать о всех переменных One.
class One
{
public:
int var;
class Any
{
public:
void func();
};
Any x;
};
class Two: public One
{
};
void Two::Any::func()
{
// Как получить доступ к var ??????
// var = 0; //error C2327: 'One::var' : is not a type name, static, or enumerator
//error C2065: 'var' : undeclared identifier
// One::var = 0; //error C2597: illegal reference to non-static member 'One::var'
}
void main()
{
}
Re: Класс в классе или непонятный доступ к данным.
Здравствуйте, Аноним, Вы писали:
А>Еррор в данном месте меня привел к шоку, такого я не ожидал... вроде бы как Any находится по иерархии в One, а А>значит и должен знать о всех переменных One.
А>
А>class One
А>{
А>public:
А> int var;
А> class Any
А> {
А> public:
А> void func();
А> };
А> Any x;
А>};
А>class Two: public One
А>{
А>};
А>void One::Any::func()
А>{
А> // Как получить доступ к var ??????
А> // var = 0; //error C2327: 'One::var' : is not a type name, static, or enumerator
А> //error C2065: 'var' : undeclared identifier
А> // One::var = 0; //error C2597: illegal reference to non-static member 'One::var'
А>}
А>void main()
А>{
А>}
А>
я не волшебник, я только учусь!
Re: Класс в классе или непонятный доступ к данным.
Дело не в доступе к данным. Чтобы обратиться к нестатическим членам нужен объект этого класса, если обращение происходит в функции другого класса obj.var
P.S. main должна возвращать int
C++ можно выучить за 21 день! ...если дни — полярные.
Re: Класс в классе или непонятный доступ к данным.
Здравствуйте, Аноним, Вы писали:
А>Еррор в данном месте меня привел к шоку, такого я не ожидал... вроде бы как Any находится по иерархии в One, а А>значит и должен знать о всех переменных One.
Знать то он знает (у тебя там все public), но похоже что проблема тут совсем в другом... В непонимании, что такое
объявление класса внутри другого класса. Это совсем не означает что, в данном случае Any, становится чемто вроде
вложенной функции в паскале. Просто Any находится в определенном пространстве имен и больше ничего.
Если нужно всетаки получить доступ к var, то в Any нужно както передать ссылку на объект One (либо в конструкторе,
либо как параметр func).
Re[2]: Класс в классе или непонятный доступ к данным.
От:
Аноним
Дата:
02.10.05 19:40
Оценка:
Z>Если нужно всетаки получить доступ к var, то в Any нужно както передать ссылку на объект One (либо в конструкторе, Z>либо как параметр func).
Во дурак я, и впрямь несложно и элегантно сейчас попробую, спасибо что подсказали
Re[3]: Класс в классе или непонятный доступ к данным.
От:
Аноним
Дата:
02.10.05 19:56
Оценка:
Здравствуйте, Аноним, Вы писали:
Z>>Если нужно всетаки получить доступ к var, то в Any нужно както передать ссылку на объект One (либо в конструкторе, Z>>либо как параметр func).
А>Во дурак я, и впрямь несложно и элегантно сейчас попробую, спасибо что подсказали
Хотя нет, такой способ не подойдет, ведь если создать указатель на класс One, то переменная var будет использоваться из копии класса а не из того что мне нужно. Черт, как это сказать, короче такой способ не годится
Re[4]: Класс в классе или непонятный доступ к данным.
От:
Аноним
Дата:
02.10.05 20:05
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
Z>>>Если нужно всетаки получить доступ к var, то в Any нужно както передать ссылку на объект One (либо в конструкторе, Z>>>либо как параметр func).
А>>Во дурак я, и впрямь несложно и элегантно сейчас попробую, спасибо что подсказали
А>Хотя нет, такой способ не подойдет, ведь если создать указатель на класс One, то переменная var будет использоваться из копии класса а не из того что мне нужно. Черт, как это сказать, короче такой способ не годится
Вот что я хотел сказать,
Two classTwo;
classTwo.Func(); // Func должно менять значение именно One::var а не какого либо друго обьекта One
Re[5]: Класс в классе или непонятный доступ к данным.
От:
Аноним
Дата:
02.10.05 20:07
Оценка:
Вот что я хотел сказать,( просто лень региться и постоянно ошибки нахожу, этот вариант правильный)
Two classTwo;
classTwo.Func(); // Func должно менять значение именно classTwo.var а не какого либо друго обьекта One
Re: Класс в классе или непонятный доступ к данным.
От:
Аноним
Дата:
02.10.05 21:05
Оценка:
Вообще-то это и не должно компилироваться.
В каком-то смысле то, что ты написал, эквивалентно следущему:
class Any
{
public:
void func();
};
class One
{
public:
int var;
Any x;
};
void Any::func()
{
// var = 0; было бы странно, если var был бы тут доступен ;)
}
Как вариант можешь сделать примерно так:
// forward declaration of the class Oneclass One;
class Any
{
public:
// constructor
Any(One *pOne): m_pOne(pOne) {};
void func()
{
m_pOne->var = 0;
}
private:
One *m_pOne;
};
class One
{
public:
// constructor
One(): x(this) {};
int var;
Any x;
};
Если опишешь свою проблему, то помогут найти более элегантное решение.