原谅这个非常基本的问题,但作为一名Java程序员,这个C ++错误并不完全是“点击”,可以这么说。
我想在一个函数中创建并初始化一个数组,然后将该数组传递给另一个函数。在接收函数中,我想访问传入数组的元素。
作为(缩写)示例:
class demo{
main() {
int members[] = { 1, 2, 3, 4, 5 };
example.function(members);
}
}
将数组members
传递给以下函数:
class example {
int members[];
void function(int mem[]) {
members = mem;
}
}
这给了我错误:
error: incompatible types in assignment of ‘int*’ to ‘int [0]’
我希望example.members[]
等于demo.members[]
。我理解为什么我在int*
中获得example.function
,但无法弄清楚如何在class example
中设置数组。
答案 0 :(得分:3)
只需用C ++方式,然后使用std::vector
:
#include <vector>
class example {
std::vector<int> members;
void function(std::vector<int> const& mem) {
members = mem;
}
};
在C ++ 11中,通过让ex.function({1, 2, 3})
按值获取其参数然后提供 rvalue (例如:function()
),可以避免复制将其移动到数据成员中:
#include <vector>
class example {
std::vector<int> members;
void function(std::vector<int> mem) {
members = std::move(mem);
}
};
答案 1 :(得分:2)
将私有成员变量example::members
更改为int *
。
class Example {
int *members;
void function(int *mem) {
members = mem;
}
}
void main () {
int array[] = { 1, 2, 3, 4, 5 };
Example ex;
ex.function(array);
}
答案 2 :(得分:1)
你不能直接分配常规数组,如果你真的想使用常规数组,你需要在循环中进行。
尝试使用std::vector
或std::array
(std::array documentation)代替。
例如:std::vector
方式:
class example {
std::vector<int> members;
void function(const std::vector<int>& mem) {
members = mem;
}
}