编译小型C ++程序时出错

时间:2015-06-16 07:23:01

标签: c++

当我编译程序时,当我使用2参数构造函数创建bookClass对象时,我得到关于int的错误。错误与解析为构造函数的整数参数有关。该计划是:

 #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;
    }

2 个答案:

答案 0 :(得分:0)

编译代码我没有收到您建议的错误。但是,这一行存在问题:

bookClass book = new bookClass(name, numberr);

C ++不是Java。 new返回一个指向为给定类动态分配的内存的指针。

你想要的只是:

bookClass book (name, numberr);

答案 1 :(得分:0)

您的代码问题很简单。我想你是在C ++之前用Java或C#编程的。在C ++中,只有当我们想在堆上明确地创建一个对象(并获得指向它的指针)时,我们才调用new运算符。

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

但是,现在你遇到了麻烦,因为你正在调用book.getName(),其中book是某种类型的指针,并且它没有成员getName()。您必须首先取消引用该指针,然后调用成员函数(*book).getName();或简单地book->getName();

但是,由于C ++的对象不必在堆上(Java对象必须),因此可以使用new

创建没有bookClass book(name, numberr);运算符的对象