2016-02-12 3 views
-4

У меня есть производный класс из абстрактного класса, и я пытаюсь передать его как аргумент класса-члена производного. У меня также есть вопрос о предстоящей декларации. Какие-либо предложения?Пропустить базовый класс в качестве аргумента в функции-члене производного

class base; 
void print(*base); 


class base { 
public: 
const int number = 5; 
// ... virtual funcs etc. 
};  

class derived:public base { 
public: 
void test() { 
print(&base); // I guess here is the mistake 
}; 

void print(*base) { 
cout << base->number << endl; 
} 
+0

Голосование, чтобы закрыть вопрос - это действительно бесполезно, код почти случайный. – SergeyA

ответ

1

Только print(this) (см online example). Вы не можете взять адрес класса.

+0

'this' возвращает указатель на производный класс, а не базу, как я хочу. Ошибка: Неверное пользовательское преобразование из 'производного' 'в' base & ' – user4168715

+0

Я предполагаю, что 'print' объявлен в вашем реальном коде как' void print (base &) '. В этом случае используйте 'print (* this);'. – TartanLlama

0

Класс - это тип. Типы не имеют адресности, только переменные. Вам также не хватает даже базового понимания C++.

void print(*base); 

Это полная чепуха. Вы должны вернуться к книгам.

0

указатели на класс объекты могут неявно преобразовать в указатели на их базовый класс, так что вы можете просто передать this и пусть стандартное преобразование произойдет:

void test() { 
    print(this); 
}; 
0

I have a derived class from an abstract class, and I am trying to pass it as an argument of a member class of the derived one. I also have a forward declaration issue. Any suggestions?

Вашего опережающее объявление неправильно. Это C++, а не go, поэтому:

void print(base* pointerToBase); 

Правильно. Кроме того, ответ Альфа прав. Я бы предпочел использовать ссылку, указатель, и поскольку печать обычно не изменяет состояние, сделайте ее const. Тогда ваш код будет:

class base { 
public: 
const int number = 5; 
// ... virtual funcs etc. 
};  

void print(const base&); 

class derived:public base { 
public: 
void test() { 
print(*this); 
}; 

void print(const base& b) { 
cout << base.number << endl; 
}