将二维数组作为 class 参数传递
Passing 2D array as class parameter
我正在尝试设置一个 class,它在编译时使用未知大小的二维数组进行初始化。我认为最好的方法是将数组作为指针传递。这对 1d 数组按预期工作,但是当我尝试对 2d 数组执行相同操作时。我收到一条错误消息,指出它无法将参数 2 从 'char [3][3]' 转换为 'char*'。有没有人对我如何让它工作有简单的解释?这是我的代码。
TestClass.h:
#pragma once
#include <iostream>
class TestClass
{
public:
std::string name;
char *data;
TestClass(std::string name, char *data);
};
TestClass.cpp:
#include "TestClass.h"
TestClass::TestClass(std::string name, char *data)
{
this->name = name;
this->data = data;
}
Main.cpp:
#include "TestClass.h"
int main()
{
char TestArray[3][3] = {{ 'A', 'B', 'C' },
{ 'D', 'E', 'F' },
{ 'G', 'H', 'I' }};
TestClass Test("TestName", TestArray);
std::cout << Test.data[2] << std::endl;
return 1;
}
您可以通过传递第一个元素的地址来传递一个二维数组:
TestClass Test("TestName", &TestArray[0][0]);
但是 TestClass
应该如何知道数组的维度呢?没有办法查询数据或猜测。您还必须通过 num_rows
和 num_cols
.
但后来我看到:
std::cout << Test.data[2] << std::endl;
所以现在您希望二维数组成为 C-style 字符串的一维数组?那不是你的数据所代表的。
您真的应该忘掉所有 C-style 垃圾并使用现代 C++ 构造。使用 std::vector<std::string>
存储可变数量的字符串。
问题是构造函数的第二个参数是char*
类型,但你传递的是一个二维数组TestArray
,它将decay 到 char (*)[3]
并且因为没有从 char(*)[3]
到 char*
的隐式转换,所以你得到了提到的错误。
要解决这个问题,您可以将构造函数的第二个参数设为指向大小为 3
的数组的指针(但随后您还将拥有更改 data
) 的类型或更好地使用 std::vector
和 std::string
.
我正在尝试设置一个 class,它在编译时使用未知大小的二维数组进行初始化。我认为最好的方法是将数组作为指针传递。这对 1d 数组按预期工作,但是当我尝试对 2d 数组执行相同操作时。我收到一条错误消息,指出它无法将参数 2 从 'char [3][3]' 转换为 'char*'。有没有人对我如何让它工作有简单的解释?这是我的代码。
TestClass.h:
#pragma once
#include <iostream>
class TestClass
{
public:
std::string name;
char *data;
TestClass(std::string name, char *data);
};
TestClass.cpp:
#include "TestClass.h"
TestClass::TestClass(std::string name, char *data)
{
this->name = name;
this->data = data;
}
Main.cpp:
#include "TestClass.h"
int main()
{
char TestArray[3][3] = {{ 'A', 'B', 'C' },
{ 'D', 'E', 'F' },
{ 'G', 'H', 'I' }};
TestClass Test("TestName", TestArray);
std::cout << Test.data[2] << std::endl;
return 1;
}
您可以通过传递第一个元素的地址来传递一个二维数组:
TestClass Test("TestName", &TestArray[0][0]);
但是 TestClass
应该如何知道数组的维度呢?没有办法查询数据或猜测。您还必须通过 num_rows
和 num_cols
.
但后来我看到:
std::cout << Test.data[2] << std::endl;
所以现在您希望二维数组成为 C-style 字符串的一维数组?那不是你的数据所代表的。
您真的应该忘掉所有 C-style 垃圾并使用现代 C++ 构造。使用 std::vector<std::string>
存储可变数量的字符串。
问题是构造函数的第二个参数是char*
类型,但你传递的是一个二维数组TestArray
,它将decay 到 char (*)[3]
并且因为没有从 char(*)[3]
到 char*
的隐式转换,所以你得到了提到的错误。
要解决这个问题,您可以将构造函数的第二个参数设为指向大小为 3
的数组的指针(但随后您还将拥有更改 data
) 的类型或更好地使用 std::vector
和 std::string
.