这是我创建对象的方法,并调用一些函数:
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}}。我真的很困惑。代码有什么问题?
答案 0 :(得分:0)
您可能没有看到打印输出,因为您没有冲洗标准:
std::cout << "initImg\n";
不强制输出,请尝试将其更改为:
std::cout << "initImg" << std::endl;
标准输出通常只会在以下情况下冲洗:
您使用endl
或flush
填充其输出缓冲区
程序正常退出
因此,如果您的程序只输出少量输出并且继续运行或崩溃,则应使用endl
或flush
。
如果这没有帮助,您应该在调试器中单步执行该代码。