使用C ++将Array设置为初始化的传入数组

时间:2013-05-23 20:17:57

标签: c++ arrays pointers pass-by-reference

原谅这个非常基本的问题,但作为一名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中设置数组。

3 个答案:

答案 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::vectorstd::arraystd::array documentation)代替。

例如:std::vector方式:

class example {
   std::vector<int> members;

   void function(const std::vector<int>& mem) {
      members  = mem;
   }
}