2015-09-03 3 views
-2

У меня возникли проблемы с отслеживанием ошибки в следующем фрагменте кода. Я запустил его, и он говорит «A»: никакого подходящего конструктора по умолчанию не существует ». Где именно существует конструктор без параметров?'A': нет подходящего конструктора по умолчанию

#include<iostream> 
using namespace std; 
class A 
{ 
    int x; 
public: A(int i) : x(i){} 
     int get_x() const { return x; } 
}; 

class B : public A 
{ 
    int *y; 
public: B(int i) :A(i){ 
    y = new int[i]; 
    for (int j = 0; j < i; j++) y[j] = 1; 
    } 
     B(B&); 
     int &operator[](int i) { return y[i]; } 
}; 

B::B(B& a) 
{ 
    y = new int[a.get_x()]; 
    for (int i = 0; i < a.get_x(); i++) y[i] = a[i]; 
} 

ostream& operator<<(ostream &o, B a) 
{ 
    for (int i = 0; i < a.get_x(); i++) 
     o << a[i]; 
    return o; 
} 

int main() 
{ 
    B b(5); 
    cout << b; 
    return 0; 
} 
+0

Вам не кажется, что вы должны это знать? Какой компилятор не выводит номер строки ошибки? – LogicStuff

+0

Ответ на ваш вопрос. Вы не определили конструктор по умолчанию для класса A. Вам нужно добавить 'A() {}' в тело 'class A' –

+0

@PoojaNilangekar Это было бы неправильным решением. Лучше называть конструктор копии 'A'. – juanchopanza

ответ

1
B::B(B& a) 

является конструктором. Так как это конструктор, вам нужно построить A часть B, так как A не имеет конструктора по умолчанию. Я считаю, что вы хотели создать конструктор копий, и если бы это было так:

B::B(const B& a) : A(a) 
{ 
    y = new int[a.get_x()]; 
    for (int i = 0; i < a.get_x(); i++) y[i] = a[i]; 
} 
Смежные вопросы