如何从具有无参数构造函数的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动态分配内存。
答案 0 :(得分:2)
这个
pages = num;
应该是
pages = #
您应该使用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();
}
这可能不是最有效的,但可以尝试一下。