C++ 没有调用构造函数?为什么?
这就是我创建对象并调用一些函数的方式:C++ 没有调用构造函数?为什么?,c++,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>
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
\ifndef Img\u水电站
#定义Img_水电站
#包括
#包括
#包括
#包括“./obj/texture.hpp”
#包括“./obj/color.hpp”
#包括“layer.hpp”
使用字节=无符号字符;
类Img
{
公众:
字节*数据;
Img(整数宽度、整数高度、整数格式);
空集_像素(整数x,整数y,颜色*c);
void add_layer(layer_layera);
纹理*纹理;
~Img();
私人:
整数宽度、高度、格式、数据长度;
std::向量层;
};
#恩迪夫
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.hpp”
Img::Img(int\u宽度、int\u高度、int\u格式)
{
std::cout format(格式){
字节*c_字节=c->bytes_();
for(int i=0;i std::cout您可能看不到打印输出,因为您没有刷新标准输出:
std::cout << "initImg\n";
std::难道这些指针看起来非常不必要。img
和对set\u pixel
的调用应该是普通对象。texture\u
应该返回一个普通对象,除非它有std::unique\u ptr
的特定需要。set\u pixel
不应该使用指针。数据
应该是std::vector
。您也应该使用构造函数初始值设定项列表。请发布一个。代码看起来不错。您正在使用什么编程环境以及编译的具体方式?能否将代码简化为一个文件和一个编译命令?我怀疑问题出在您没有显示的代码中。最小的main()是什么
这说明了问题所在?他,我真的很抱歉,我在编译时使用了一个错误的库..xDI刚刚测试了它。仍然没有输出。@Vitaliuskuchalski:请提供一个完整但最简单的示例。@Vitaliuskuchalski您有没有使用过调试程序?程序结束时它仍然会被打印出来。
std::cout << "initImg" << std::endl;