在c ++中访问动态分配的变量

时间:2015-04-06 15:45:41

标签: c++

如何从具有无参数构造函数的main统计实例化类对象,该构造函数将其中一个属性初始化为int值。这个属性是c ++中的指针。我尝试解除引用变量int * pages来访问它指向的值,但这在main()中不起作用

class Book {
private:
    int *pages;
public:
    void setPages(int num) {
        pages = num;
    }
    int getPages() {
        return pages;
    }
};

int main() {
    Book b1;
    int* pages;
    *pages = 500;
    b1.setPages(500);
    cout      << "number of pages are = " << b1.getPages << endl;
}

我想我想要实现的是为无参数构造函数中的int动态分配内存。

2 个答案:

答案 0 :(得分:2)

这个

pages = num;

应该是

pages = &num;   

您应该使用num(运营商地址)将pages的内存地址分配给&,而不是变量本身。


 b1.getPages应更正为b1.getPages()

我不知道你为什么宣布这个指针,因为你还没有在你的代码中使用它。
int* pages;

但如果您打算使用它,您可以这样做

int* pages;
*pages = 500; 
b1.setPages(*pages);  

OR

int pages;
pages = 500; 
b1.setPages(pages);

答案 1 :(得分:1)

我认为你打算这样做

void setPages(int num) {
    *pages = num;
}

int getPages() {
    return *pages;
}

否则,代码将无法编译。

最初,你正在尝试

pages = num;

pages是一个int指针,num是一个int,所以这不起作用。

然后,你正在尝试

int getPages() {
    return pages;
}

该函数的返回类型为int,但它会尝试返回指针。

另外,将函数调用更改为

cout << "number of pages are = " << b1.getPages() << endl;
                                                ^ you are missing these

代码的下一个问题出在您的main()

int* pages;
*pages = 500;

pages没有指向任何地址,你在这里得到了一个SEGFAULT。

因此,您可以将代码修改为

#include<iostream>
using namespace std;
class Book 
  {
    private:
      int *pages;
    public:
      void setPages(int num) 
        {
          pages = new int;
          *pages = num;
        }    
      int getPages() 
        {
          return *pages;
        }
      void d()
        {
          delete pages;
        }
  };
int main() 
  {
    Book b1;
    int* pages = new int;
    *pages = 500;
    b1.setPages(500);
    cout << "number of pages are = " << b1.getPages() << endl;
    delete pages;
    b1.d();
  }

这可能不是最有效的,但可以尝试一下。

相关问题