2016-09-12 2 views
0

я получил основную программу в prog2.cppКак вызвать функцию из двухуровневого унаследованного класса в C++?

#include "stack1.h" 
int main(void){ 
stack1 x(100); // Declare a stack1 x of length 100 
...... 
} 

И мне нужно, чтобы вызвать эту STACK1 из stack1.h, но эта оригинальная функция от stack.h, с является родительским классом stack1.h:

class stack 
{ 
.... 
public: 
stack(int length); 
.... 
} 

stack1.h сейчас выглядит так:

#include "stack.h" 
class stack1: public stack{ 
...... //irrelevant code 
} 

Проблема STACK1 х (100) получил ошибку от MVS говоря:

Error: no instance of constructor "stack1::stack1" matches the argument list.

Я пробовал много способов избавиться от этого, но это всегда приводило к большим проблемам. Как это исправить?

ответ

0

Ответственность конструктора подкласса заключается в вызове конструктора суперкласса.

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

struct stack1: public stack { 

    stack1(int n) : stack(n) {} 

}; 

Вы на самом деле не вызывая функцию здесь. Вы вызываете конструктор. Правила для конструкторов разные. Как правило, нет проблемы с использованием подкласса для вызова метода, который унаследован от суперкласса. Это просто. Но в этом случае это не метод, это конструктор. Действуют разные правила.

0

Если вы просто хотите использовать конструктор из родительского класса, вы можете использовать ключевое слово using.

class stack1 : public stack 
{ 
    using stack::stack;//use all constructors of stack 
    using stack::operator=; //use the assignment operators 
}; 

Однако: имейте в виду, что этот miht инициализирует значения по-другому, чем вы ожидаете.

+0

грустно, что я мог использовать только один тик. вы оба даете точное решение, которое я хочу, спасибо! –