我将变量初始化为"问题"后,出现"访问冲突写入位置0x00000000"错误消息.我的猜测是我应该预先保留内存空间来分配(类似的东西),但到目前为止我还没有弄清楚如何用C++来做.bkNULLNULLBook bk = new Book();
#ifndef Book_H
#define Book_H
struct _book;
typedef _book* Book;
Book CreateBook(unsigned int pageNum);
Run Code Online (Sandbox Code Playgroud)
#include "Book.h"
#include <iostream>
#ifndef Book_CPP
#define Book_CPP
using namespace std;
struct _book
{
int pageNum;
};
Book CreateBook( unsigned int pageNum){
Book bk = NULL;
bk->pageNum = pageNum;
return bk;
};
Run Code Online (Sandbox Code Playgroud)
bst*_*our 23
您将bk分配给NULL,然后尝试访问其成员.这与Java中的空指针相同,而您正在做的事情通常会引发NullPointerException(感谢评论).如果要创建指向结构的指针,则需要使用operator new:
bk = new _book;
// ...
return bk;
Run Code Online (Sandbox Code Playgroud)
然后确保在完成后调用指针上的delete.
不过,我建议不要在这里使用指针.与其他语言不同,C++允许您按值创建对象.它还允许引用和指针,但只有在绝对必要时才使用指针.如果您只是想创建一个具有给定pageNum的book对象,那么您应该在创建一个构造函数时:
struct _book {
int pageNum;
_book(int n) : pageNum(n) // Create an object of type _book.
{
}
};
Run Code Online (Sandbox Code Playgroud)
然后你可以调用它
_book myBook(5); // myBook.pageNum == 5
Run Code Online (Sandbox Code Playgroud)
如果您是C++的新手,请为自己写一本好书.它不仅仅是一种低级语言,而且它也不仅仅是一种OOP语言.这是一种多范式的瑞士军刀语言.