2015-06-16 2 views
-5

когда я компилирую программу, я получаю сообщение об ошибке, когда я создаю объект bookClass, используя 2 конструктора аргументов. ошибка имеет что-то общее с аргументом integer, обработанным конструктором. программа такова:получение ошибки при компиляции небольшой программы на C++

#include <iostream> 
#include <string> 

using namespace std; 

    class bookClass{ 
    private: 
    string bookName; 
    int bookNumber; 



    public: 


    void setName(string c){ 
    bookName=c; 
    } 

    void setNumber(int d){ 
    bookNumber=d; 
    } 

    string getName(){ 
    return bookName; 
    } 

    int getNumber(){ 
    return bookNumber; 
    } 
    bookClass(string a, int b){ 
    bookName=a; 
    bookNumber=b; 
    } 


    }; 

    int main() 
    { 
    int numberr; 
    string name; 
    cout << "Enter the book name: "; 
    cin >> name; 
    cout << "\nEnter the book number: "; 
    cin >> numberr; 

    bookClass book=new bookClass(name, numberr); 

    cout << "\n\nThe book " << book.getName() << " has book number " <<   
     book.getNumber() << endl; 


    return 0; 
    } 
+0

Я уверен, что компилятор не говорит * "ошибка о int "*. Пожалуйста, укажите фактический текст сообщения об ошибке в своем вопросе. –

+0

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

+0

Рассмотрите возможность чтения сообщения об ошибке. Затем уменьшите свой код до mcve. Если вы еще не решили проблему, отправьте сообщение mcve и сообщение об ошибке здесь. – user2079303

ответ

0

Компиляция вашего кода Я не получил предложенную вами ошибку. Однако есть проблема с этой линией:

bookClass book = new bookClass(name, numberr); 

C++ - это не Java. new возвращает указатель на динамически выделяемую память для данного класса.

То, что вы хотите, это просто:

bookClass book (name, numberr); 
+0

спасибо, это была проблема. –

0

Проблема с кодом просто. Я предполагаю, что вы программировали на Java или C# до C++. В C++ мы вызываем оператор new только в том случае, если мы хотим явно создать объект в куче (и получить указатель на него).

bookClass* book=new bookClass(name, numberr); 

Однако, теперь вы находитесь в неприятности, потому что вы вызываете book.getName() где book имеет указатель типа к чему-то, и он не имеет ни одного члена getName(). Вы должны сначала разыменовать этот указатель, а затем вызвать функцию-член (*book).getName(); или просто book->getName();.

Однако, поскольку объекты С ++ не должны быть в куче (Java объекты должны), вы можете создать объект без new оператора с помощью bookClass book(name, numberr);

+0

спасибо, что была ошибка –

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