构造函数没有调用?为什么?

时间:2014-01-03 16:59:05

标签: c++

这是我创建对象的方法,并调用一些函数:

Img *img = new Img(16, 16, 4);
img->set_pixel(10, 10, new Color(1.0f, 0.0f, 0.0f, 1.0f));
img->texture_();

img.hpp

#ifndef Img_HPP
#define Img_HPP

#include <iostream>
#include <vector>
#include <math.h>

#include "../obj/texture.hpp"
#include "../obj/color.hpp"
#include "layer.hpp"

using byte = unsigned char;

class Img
{
public:
    byte *data;
    Img(int _width, int _height, int _format);
    void set_pixel(int x, int y, Color* c);
    void add_layer(Layer _layera);
    Texture *texture_();
    ~Img();
private:
    int width, height, format, data_length;
    std::vector<Layer> layers;
};

#endif

img.cpp

#include "img.hpp"

Img::Img(int _width, int _height, int _format)
{
    std::cout << "initImg\n";
    width = _width;
    height = _height;
    format = _format;
    data_length = width*height*4;
    data = new byte[data_length];
    std::fill_n(data, data_length, 255);
}

void Img::set_pixel(int x, int y, Color *c) {
    if (c->format_() == format) {
        byte *c_bytes = c->bytes_();
        for (int i = 0; i < format; i++) {
            int d_i = (width*y+x)*format+i;
            data[d_i] = c_bytes[i];
        }
    } else {
        //unknown color format: <format>
    }
}

void Img::add_layer(Layer _layer) {
    layers.push_back(_layer);
}

Texture *Img::texture_() {
    std::cout << width << " " << height << " " << format << "\n";
    return new Texture(width, height, format, data);
}

Img::~Img()
{

}

编译此代码时,我没有收到任何错误或警告。问题是,当我运行它时,Img的构造函数未被调用(“initImg”未打印到控制台)。调用其他两个函数,但Img对象数据不正确。当texture_()函数打印16 4 1024时,16 16 4函数会向控制台输出{{1}}。我真的很困惑。代码有什么问题?

1 个答案:

答案 0 :(得分:0)

您可能没有看到打印输出,因为您没有冲洗标准:

std::cout << "initImg\n";

不强制输出,请尝试将其更改为:

std::cout << "initImg" << std::endl;

标准输出通常只会在以下情况下冲洗:

您使用endlflush

填充其输出缓冲区

程序正常退出

因此,如果您的程序只输出少量输出并且继续运行或崩溃,则应使用endlflush

如果这没有帮助,您应该在调试器中单步执行该代码。