gpt4 book ai didi

c++ - 拆分函数的声明和定义,还是删除函数头中的新运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:37 24 4
gpt4 key购买 nike

我是 C++ 新手,我在项目中遇到了困难。

super .h

#pragma once
#include <iostream>

float *list=new float[10];

class Super{
public:
void function(){}
};

啊啊

#pragma once
#include "Super.h"

class A{
public:
void function();
};

A.cpp

#include "A.h"
void A::function(){
std::cout<<"Working A!"<<std::endl;
}

主要.cpp

#include "A.h"

int main(int argc, const char * argv[]) {
A a;
a.function();
return 0;
}

此代码未编译,(clang: error: linker command failed with exit code 1 (use -v to see invocation)) and I found if I delete

float *list=new float[10];

在Super.h中,编译成功

但是,我需要的是A类中可以访问的数组,所以我试了很多方法,发现如果我离开float数组,结合A.h和A.cpp,就可以编译,比如

//Super.h    

float *list=new float[10];

class Super{

public:
void function(){}
};

------------------------------------
// A.h

#pragma once
#include "Super.h"


class A{

public:
void function();
};

void A::function(){
std::cout<<"Working A!"<<std::endl;
}

我必须结合 A.cpp 和 A.h 吗?还是我的设计不好?我使用 XCode 8。

最佳答案

在您的实际代码中,“line ”是在 Settings.h 中声明的并用在它的drawPixel功能。

唯一使用它的地方是 main.cpp我将以相反的顺序讨论这些要点,以便我们的讨论更有意义:

  • 清理:delete[] pixels你应该使用 vector<float>相反,您可以避免与动态内存相关的所有问题:
    1. 如果 drawPixel 会怎么样清理后调用?
    2. 如果您的代码因错误而退出怎么办?
    3. 您将如何确保您的 main函数没有提前退出并错过了这个?
  • 用法:glDrawPixels(width, height, GL_RGB, GL_FLOAT, pixels)决赛 glDrawPixels 参数类型为 void*所以,如果你已经正确地替换了 pixelsvector<float>您可以通过传递 data(pixels) 进行隐式转换
  • 初始化:fill_n(pixels, width*height * 3, 1.0f)而不是 Settings.h ,这就是pixels应定义:vector<float> pixels(width * height * 3, 1.0F)您需要对系统进行这些更改以避免全局变量:
    1. void draw() 的所有实例将需要更改为 void draw(vector<float>& pixels)什么时候draw方法称为 pixels将是论点
    2. void drawPixel(const int& i, const int& j, const float& red, const float& green, const float& blue)应该改为void drawPixel(vector<float>& pixels, const int i, const int j, const float red, const float green, const float blue)以及对 drawPixel 的任何调用函数必须取 pixel因为它是第一个st 参数
    3. void drawLine(const int& i0, const int& j0, const int& i1, const int& j1, const float& red, const float& green, const float& blue)应该改为void drawLine(vector<float>& pixels, const int i0, const int j0, const int i1, const int j1, const float red, const float green, const float blue)以及对 drawLine 的任何调用函数必须取 pixel因为它是第一个st 参数

关于c++ - 拆分函数的声明和定义,还是删除函数头中的新运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com