书.h
#ifndef Book_H
#define Book_H
// why not put the layout here?
struct Book
{
int pageNum;
};
Book CreateBook(unsigned int pageNum);
#endif
书本.cpp
#include "Book.h"
// no #define guards
// do not using namespace std;, it is a bad habit
Book CreateBook( unsigned int pageNum){
Book bk;
bk.pageNum = pageNum;
return bk;
};
这是最简单的解决方案。书籍是实际价值,可以复制和移动等。
如果您需要抽象类型的不透明度,那么您才应该处理指针。当您确实处理指针时,将它们隐藏在 a 后面typedef是一个坏主意:指针意味着资源管理,因此很明显您正在使用它们。
基于指针的版本:
#ifndef Book_H
#define Book_H
// why not put the layout here?
struct Book;
Book* CreateBook(unsigned int pageNum);
#endif
*书.cpp *
#include "Book.h"
// no #define guards
// do not using namespace std;, it is a bad habit
Book* CreateBook( unsigned int pageNum){
Book* bk = new Book;
bk->pageNum = pageNum;
return bk;
};
但是,如果你正在创建东西,你可能应该创建智能指针:
#include <memory>
std::shared_ptr<Book> CreateBook( unsigned int pageNum){
std::shared_ptr<Book> bk( new Book );
bk->pageNum = pageNum;
return bk;
};