C++ - 2D 数组作为方法参数
C++ - 2D array as an method argument
我有类似的类:
class Krzyzowka
{
protected:
char model[40][40];
int x, y;
public:
Krzyzowka() { }
Krzyzowka(char model[][40], int x, int y)
{
this->model=model;
}
};
现在,我在main()中声明:
char array[10][10];
并希望将其传递给:
Krzyzowka(char model[][40], int x, int y)
我是这样做的:
Krzyzowka obj(array, 10, 10);
但是,我想使用传递的数组设置模型 2D 数组:
this->model=model;
但是编译器返回两个错误:
error: no matching function for call to ‘Krzyzowka::Krzyzowka(char [10][10], int, int)’
error: incompatible types in assignment of ‘char (*)[40]’ to ‘char [40][40]’
我怎样才能正确地做到这一点?提前感谢您的帮助。
参数char model[][40]
只能用于像parameter[x][40]
这样的数组。
如果你真的想把任何行数组传递给方法,你可以使用指针:
class Krzyzowka
{
protected:
char **pp_model;
int x, y;
public:
Krzyzowka() { }
Krzyzowka(char **pp_model, int x, int y)
{
this->pp_model = pp_model;
// do not miss follow two line
this->x = x;
this->y = y;
}
};
然后,您可以传递char **
参数来实例化对象,而不是使用 char array[x][y]
。
现在你用c++
.您最好不要使用行数组。那是邪恶的。你可以改用 stl 向量。
愿这对你有帮助:)
没有可用的操作可以将一个数组自动分配给另一个数组。
想到的可能解决方法:
使用循环手动将数据复制分配给内部数组(确保跟踪有效nrows
和ncols
)。为了规避编译器的抱怨,您可以使用模板(假设在编译时已知大小):
template<int NROWS, int NCOLS>
Krzyzowka(char (&model)[NROWS][NCOLS])
{
nrows = NROWS > nrows ? nrows : NROWS;
ncols = NCOLS > ncols ? ncols : NCOLS;
for (int row = 0; row < nrows; row++)
for (int col = 0; col < ncols; col++)
this->model[row][col] = model[row][col];
}
现在,您可以创建如下对象:
char array[][2] = {{'a', 'b'}, {'c', 'd'}};
Krzyzowka k(array);
如果数组的维度仅在运行时已知(例如,基于用户输入,并且char** array
由嵌套new[]
动态分配),则可能需要采用此处给出的方法或切换到以下内容。
更好的可能是使用一些标准数组类型,如std::vector
(您可以交换或分配)。那么你对编译器类型不兼容的抱怨也没有问题。
std::vector<std::vector<char> > array(nrows, std::vector<char>(ncols));
std::vector<std::vector<char> > model;
model = array; // or model.swap(array); if you don't need the copy
相关文章:
- c++方法参数只能在linux的发布模式下自行更改
- 使用移动语义:右值引用作为方法参数
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 将方法参数类型更改为子类中的派生类
- ofstream作为C 中的方法参数
- 使用 gmock 匹配器将 std::function 设置为 EXPECT_CALL 中的方法参数
- C com 方法参数扣除
- 获取非静态方法参数计数
- 使用 gmock 返回模拟方法参数
- 运行 QML 时出现"未知方法参数类型"错误
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- 将C 方法参数转换为模板参数会因编译错误而失败
- 如何在方法参数中使用boost :: asio :: buffer
- qsharedPointer作为方法参数或方法的返回值的良好实践
- 如何将方法指针声明为Typedef方法参数
- 方法参数中的 OpenCV 垫"预期")""
- 方法参数中的 consst* 常量
- 带有“class”详细类型说明符的方法参数
- 具有原始方法参数派生类的 C++ 重载方法参数
- C++ std::string length() 或 size() 不适用于方法参数