首页 > 解决方案 > 如何从另一个文件调用类构造函数?

问题描述

我有 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 和路径未初始化。为什么不初始化?

标签: c++constructor

解决方案


这条线

   int num_of_path = num_of_line * 2 + 2;

在构造函数中创建一个局部变量,它掩盖了成员变量。摆脱int它,它会工作。更可取的是使用成员初始化列表。

的检查if(!path)是未定义的行为,因为没有默认初始化path,它只是一些随机指针,而不是nullptr. 我只是删除检查,因为此时路径不可能具有初始化值。


推荐阅读