Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有调用构造函数?为什么?_C++ - Fatal编程技术网

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;istd::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;