Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.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++;在构造函数中传递数组而不在别处定义它们_C++_Arrays_Constructor - Fatal编程技术网

C++ c++;在构造函数中传递数组而不在别处定义它们

C++ c++;在构造函数中传递数组而不在别处定义它们,c++,arrays,constructor,C++,Arrays,Constructor,我目前有以下代码: #include "stdafx.h" #include "AddressInfo.h" AddressInfo::AddressInfo(int ammoCount, int pointerLevel, DWORD baseAddress, DWORD* offsetArray) { ammo = ammoCount; numPointers = pointerLevel; this->baseAddress = baseAddress;

我目前有以下代码:

#include "stdafx.h"
#include "AddressInfo.h"

AddressInfo::AddressInfo(int ammoCount, int pointerLevel, DWORD baseAddress, DWORD* offsetArray) {
    ammo = ammoCount;
    numPointers = pointerLevel;
    this->baseAddress = baseAddress;
    offsets = (DWORD*)malloc(sizeof(offsetArray));
    this->offsets = offsetArray;
};

AddressInfo::~AddressInfo() {
    delete[] offsets;
}

void AddressInfo::print() {
    std::cout << this->offsets[0]<< std::endl;
}





DWORD x[] = { 0x374, 0x14, 0x0 };
AddressInfo* ammo = new AddressInfo(1000, 3, (DWORD)(0x00509B74), x);

int main()
{
    ammo->print();
    system("pause");
}
#包括“stdafx.h”
#包括“AddressInfo.h”
AddressInfo::AddressInfo(int ammoCount、int pointerLevel、DWORD基地址、DWORD*offsetArray){
弹药=弹药计数;
NUMPOINTS=指针级别;
此->基地址=基地址;
偏移量=(DWORD*)malloc(sizeof(offsetArray));
这->偏移量=偏移量;
};
AddressInfo::~AddressInfo(){
删除[]个偏移量;
}
void AddressInfo::print(){
std::cout offset[0]print();
系统(“暂停”);
}
此代码有效,但我想执行以下操作: 与预先定义数组并将其传递到构造函数不同,我希望按如下方式传递数组:{0x374,0x14,0x0}

这可行吗


我尝试了打字:(DWORD*){0x374,0x14,0x0}

您应该使用
std::vector
来执行此任务和将来的任务。看看它让一切变得多么简单和干净

#include <iostream>
#include <vector>

class AddressInfo
{
    int ammoCount;
    int pointerLevel;
    std::vector<uint32_t> offsets;

public:
    AddressInfo(int ammoCount, int pointerLevel, std::vector<uint32_t> offsets) :
        ammoCount{ ammoCount }, pointerLevel{ pointerLevel }, offsets{ offsets }
    {   
    }

    void print(size_t i) 
    {
        std::cout << this->offsets.at(i) << std::endl;
    }
};

int main() 
{
    AddressInfo ammo (1000, 0x00509B74, { 0x374, 0x14, 0x0 });
    ammo.print(0);
    ammo.print(1);
    ammo.print(2);

    return 0;
}
#包括
#包括
类地址信息
{
国际弹药计数;
int指针级;
std::矢量偏移;
公众:
AddressInfo(int ammoCount、int pointerLevel、std::矢量偏移):
ammoCount{ammoCount},pointerLevel{pointerLevel},offsets{offsets}
{   
}
空白打印(尺寸i)
{

std::cout offsets.at(i)您应该使用
std::vector
来完成此任务和将来的任务。看看它让一切变得多么简单和干净

#include <iostream>
#include <vector>

class AddressInfo
{
    int ammoCount;
    int pointerLevel;
    std::vector<uint32_t> offsets;

public:
    AddressInfo(int ammoCount, int pointerLevel, std::vector<uint32_t> offsets) :
        ammoCount{ ammoCount }, pointerLevel{ pointerLevel }, offsets{ offsets }
    {   
    }

    void print(size_t i) 
    {
        std::cout << this->offsets.at(i) << std::endl;
    }
};

int main() 
{
    AddressInfo ammo (1000, 0x00509B74, { 0x374, 0x14, 0x0 });
    ammo.print(0);
    ammo.print(1);
    ammo.print(2);

    return 0;
}
#包括
#包括
类地址信息
{
国际弹药计数;
int指针级;
std::矢量偏移;
公众:
AddressInfo(int ammoCount、int pointerLevel、std::矢量偏移):
ammoCount{ammoCount},pointerLevel{pointerLevel},offsets{offsets}
{   
}
空白打印(尺寸i)
{

std::cout offsets.at(i)这个构造函数是错误的

AddressInfo::AddressInfo(
  int ammoCount, 
  int pointerLevel, 
  DWORD baseAddress, 
  DWORD* offsetArray) 
{
  ammo = ammoCount;
  numPointers = pointerLevel;
  this->baseAddress = baseAddress;
  offsets = (DWORD*)malloc(sizeof(offsetArray));
  this->offsets = offsetArray;
};

首先,使用MALOC分配,在C++中,我们通常使用新的,因为MALLC不调用任何构造函数。第二个siZOF不给出数组的大小,它给了指针的大小——它与写入sieOf(dWord)

相同。 然后,在为要指向的
offset
分配了一些内容之后,让它指向参数,以便泄漏您分配给malloc的字节

在析构函数中,您假设
offsetArray
先前已被分配了new[]并传递给构造函数,但您的类的用户如何知道这一点

设想有人使用堆栈上分配的数组创建AddressInfo

DWORD myArray[10];
AddressInfo adr = new AddressInfo(ammoCount,pointerLevel,baseAddress,offsetArray);
人们不希望通过研究实现来寻找假设,也就是把东西放在一个类中来隐藏实现


而不是使用<代码> STD::数组或STD::vector 当您在C++中使用数组时,然后创建一个更加透明和干净的设计——参见KrnAgS儿童答案。

< P>此构造函数只是错误的

AddressInfo::AddressInfo(
  int ammoCount, 
  int pointerLevel, 
  DWORD baseAddress, 
  DWORD* offsetArray) 
{
  ammo = ammoCount;
  numPointers = pointerLevel;
  this->baseAddress = baseAddress;
  offsets = (DWORD*)malloc(sizeof(offsetArray));
  this->offsets = offsetArray;
};

首先,使用MALOC分配,在C++中,我们通常使用新的,因为MALLC不调用任何构造函数。第二个siZOF不给出数组的大小,它给了指针的大小——它与写入sieOf(dWord)

相同。 然后,在为要指向的
offset
分配了一些内容之后,让它指向参数,以便泄漏您分配给malloc的字节

在析构函数中,您假设
offsetArray
先前已被分配了new[]并传递给构造函数,但您的类的用户如何知道这一点

设想有人使用堆栈上分配的数组创建AddressInfo

DWORD myArray[10];
AddressInfo adr = new AddressInfo(ammoCount,pointerLevel,baseAddress,offsetArray);
人们不希望通过研究实现来寻找假设,也就是把东西放在一个类中来隐藏实现


< >使用<代码> STD::数组或 STD::vector >在C++中使用数组时,然后创建一个更加透明和干净的设计——参见KrnAgS儿童答案。

<代码> {x,y,…}
符号仅在赋值时有用。我认为它不能用于函数调用。请使用
std::vector
。如果您使用C,这可能是一个复合文字。
offset=(DWORD*)malloc(sizeof(offsetaray));
delete[]偏移量;
根本不能work@UnholySheep赋值
this->offsetaray=offsetArray
在它到达之前就将其中断。
{x,y,…}
符号仅在赋值时有用。我认为它不能用于函数调用。请使用
std::vector
。如果您使用C,这可能是一个复合文字。
offset=(DWORD*)malloc(sizeof(offsetaray));
delete[]偏移量;
根本不能work@UnholySheep作业
this->offsets=offsetArray
在到达该作业之前将其打断。