如何在C++中创建结构的实例?

G21*_*G21 16 c++ struct

我将变量初始化为"问题"后,出现"访问冲突写入位置0x00000000"错误消息.我的猜测是我应该预先保留内存空间来分配(类似的东西),但到目前为止我还没有弄清楚如何用C++来做.bkNULLNULLBook bk = new Book();

Book.h

#ifndef Book_H
#define Book_H

struct _book;
typedef _book* Book;

Book CreateBook(unsigned int pageNum);
Run Code Online (Sandbox Code Playgroud)

Book.cpp

#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语言.这是一种多范式的瑞士军刀语言.

  • 更像是瑞士军机。非常有用,非常强大,非常危险。 (2认同)
  • 嗯 C ++是由短吻鳄挥舞的瑞士军刀,也可以引发异常。 (2认同)