казалось бы задаче, гуглил, решения не нашёл. Суть проста - есть два класса. Первый - не мой, получаю из хедеров, и изменить не могу, т.к. есть только бинарник в so и заголовки. Пишу второй класс, в котором мне в качестве приватного свойства нужно инициализировать объект из первого класса. Инициализировать сразу я его не могу, т.к. мне для этого нужно передать в него значение, которое я получаю в конструкторе второго класса. Если в private я ставлю указатель, то при разименовании я получаю int вместо объекта первого класса и не могу обратиться к его методам. Ссылку я использовать не могу, так как NULL она быть не может. Для понимания накидал простой пример, иллюстрирующий мою проблему.
#include <iostream>
class test1 {
private:
int avar;
public:
test1(int a) {
avar = a;
};
int getVarTest1() {
return avar;
}
};
class test2 {
private:
test1 *test1ref = NULL; // Pointer to test1 object
public:
test2(int b) {
test1 t1(5); // Creating object from class test1
test1ref = &t1; // Putting address of t1 object to pointer test1ref
};
int getVarTest2() { // Getting int variable from subobject
std::cout << *test1ref -> getVarTest1() << "/n";
};
};
int main() {
printf("Test\n");
};
Сборка:
$ g++ test1.cpp -o test1 && ./test1
test1.cpp: In member function ‘int test2::getVarTest2()’:
test1.cpp:28:51: error: invalid type argument of unary ‘*’ (have ‘int’)
std::cout << *test1ref -> getVarTest1() << "/n";
Подскажите пожалуйста, в какую сторону копать?
Для второго то дня сразу классы - сложновато!
Нет, такая задача не решается вообще. Приватное поле недоступно
Сейчас ещё почитаю...
Нельзя так делать. t1 выходит из скоупа ещё
А, понятно. Ты не прочитал про инициализаторы членов класса. Читай.
Обсуждают сегодня