c++ - 如何从另一个文件调用类构造函数?
问题描述
我有 4 个文件 water.h water.cpp ofApp.h ofApp.cpp
水.h
typedef struct _coordinate {
int x, y;}coordinate;
class water{
public:
water(int num_of_line);
~water();
void draw();
void reset();
int water_draw_flag; // flag
float local_r, local_g, local_b; // color of line
coordinate* path;
int num_of_path; };
水.cpp
#include "water.h"
water::water(int num_of_line)
{
int num_of_path = num_of_line * 2 + 2;
if (!path) {
path = (coordinate*)malloc(sizeof(coordinate)*(num_of_path+1));
for (int i = 0; i < num_of_path+1; i++) {
path[i].x = path[i].y = -1;
}
}
water_draw_flag = 0;
}
~~~~~
应用程序.h
#include "water.h"
#include <vector>
~~~~~
void initializeWaterLines();
vector<water> wa;
应用程序.cpp
#include "ofApp.h"
~~~~~
void ofApp::initializeWaterLines() {
int i = 0;
int num = 50;
int local_x, local_y;
water init(num_of_line);
wa.assign(num, init);
~~~~~}
我构建了一个水类“init”,但水类中的 num_of_path 和路径未初始化。为什么不初始化?
解决方案
这条线
int num_of_path = num_of_line * 2 + 2;
在构造函数中创建一个局部变量,它掩盖了成员变量。摆脱int
它,它会工作。更可取的是使用成员初始化列表。
的检查if(!path)
是未定义的行为,因为没有默认初始化path
,它只是一些随机指针,而不是nullptr
. 我只是删除检查,因为此时路径不可能具有初始化值。
推荐阅读
- serenity-bdd - 剧本 - 如何在多方法任务中切换窗口?
- javascript - 将表单 (HTML) 问题 (Java Script) 附加到函数
- sql - 不同类型比赛的数据库设计
- c# - 不同屏幕尺寸上的矢量 3 位置
- javascript - 跟随 loadImage() 函数的重定向
- android - 当应用程序处于前台时,点击 Firebase 推送通知时出现重定向问题?
- angular - Angular 6嵌套子子反应表单未重置
- asp.net-mvc - 在 Razor 视图的替换函数中使用 @Html.ActionLink
- c - 如何在sdl中同时使用键盘的两个键
- docker - 当卷安装在 Windows 上时,docker 中的 npm install puppeteer 不起作用