2013-09-15 5 views
1

Даже если я никогда не вызывал функцию «Велосипед :: Велосипед (Bike *)», что вызывает ошибку?Ошибка в программе с частным конструктором

Ошибка: Не удалось найти соответствие для 'Bike :: велосипед (велосипед *)'


#include<iostream.h> 
#include<conio.h> 

class Bike 
{ 
    Bike() 
    { 
     cout<<"\nIn Bike const."; 
    } 

    public: static Bike * getBike(); 
}; 

Bike * Bike :: getBike() 
{ 
    cout<<"\nIn getBike"; 
    return new Bike(); 
} 

void main() 
{ 
    Bike b = Bike::getBike(); 
} 
+0

? это немного старый компилятор – billz

+0

'void main' не является законным C++, синглтоны - это антипаттерн, и вы пропускаете немного памяти. – chris

ответ

4

Вы пытаетесь конвертировать из Bike* в нескалярный типа Bike

Но getBike() возвращает указатель на Bike

Так

Bike *b = Bike::getBike(); 
    ^use pointer 

Похоже, вы используете какой-то десятилетие старый компилятор может быть Turbo C++

void main не является законным C++ использовать int main

Кроме того, убедитесь, что вы удалите всю память, выделенную new

+0

Не могли бы вы объяснить, что вы подразумеваете под ** нескалярным ** типом. – Shreyas

+0

@ShreyasAgarkar Ну, я предлагаю вам получить хорошую книгу на C++ и, конечно же, хороший компилятор. Простыми словами, объекты C++ могут быть либо скалярными (например, целыми и указательными), либо нескалярными (например, массивами и классами). Скалары - это примитивные объекты, которые содержат одно значение и не состоят из других объектов C++. – P0W

+0

одна последняя вещь - ссылка на хороший компилятор cpp. – Shreyas

Смежные вопросы