我是一名JavaScript程序员,他试图通过将我的JavaScript类移植到c ++来学习c ++。我很快发现c ++数组中的数组与JavaScript中的数组非常不同。
我班级的成员有数组属性。我在构造函数中初始化数组时遇到问题。这是我的代码。
set_log()
我不知道如何修复最后一部分。我已经乱七八糟了。似乎没什么用。其余的代码很好,我只是得到1个关于构造函数的错误。
我正在使用g ++进行编译。
答案 0 :(得分:0)
我建议使用std::vector
而不是普通的C array
,特别是如果你来自javascript。
因此您可以修改代码:
class Name {
public:
Name(unsigned int);
unsigned int getArraySize();
std::vector<unsigned int> getArray();
private:
std::vector<unsigned int> _array;
}
(在C ++中,首先声明公共成员(最常用的公共API)然后是类的私有成员是一种惯例。通常成员变量具有命名约定,如我使用的_
或{ {1}},以区分它们。)
m_
构造函数将创建一个unsigned int Name::getArraySize() {
return _array.size();
}
std::vector<unsigned int> getArray() {
std::vector<unsigned int> outArray;
outArray = _array;
return outArray;
}
Name::Name(unsigned int len)
: _array(len)
{
}
维数组,您可以在http://en.cppreference.com/w/cpp/container/vector/vector查看可用的构造函数。
您可以稍后更改数组的长度,将pushing元素更改为向量,或resizing。使用len
访问元素时,请注意保留[i]
。
函数i < _array.size()
返回数组中的元素数。 std ::是标准模板库的命名空间,可用于所有C ++编译器。 getArraySize
是STL中容器(std :: vector)长度的命名。
函数'getArray'应该返回数组的副本,我写了一个简短的版本,函数的短版本是size
。
答案 1 :(得分:-1)
您的代码固定为类似C ++(更像C):
class Name {
private:
unsigned int *array;
public:
unsigned int *getArray();
Name(unsigned int);
}
//I'm defining everything outside the class because I'm told that's good practice
unsigned int *Name::getArray() {
return this->array;
}
//this is the problem
Name::Name(unsigned int length) {
this->array = new unsigned int [length];
}
现在更多的C ++方式:
class Name {
private:
std::vector<unsigned int> array;
public:
std::vector<unsigned int> getArray(); // Do not worry about optimizations here; check RVO
Name(unsigned int);
}
//I'm defining everything outside the class because I'm told that's good practice
std::vector<unsigned int> Name::getArray() {
return array;
}
//this is the problem
Name::Name(unsigned int length) {
// this line is just to allocate the space for the array, but please keep in ming that you can simply add elements with push_back and the array will grow itself without your explicit memory allocation
array.resize(length);
}
在第一种情况下,您可以定义指针,例如在一个内存位置的地址,它将保存数组,在第二种情况下,你声明一个对象,它将为你处理内存(或多或少)。
同时看看矢量类:
初学者的一条建议:尝试学习和使用C ++容器(来自STL,BOOST),通常实现非常好并且你没有冒险在脚下射击(指针是“危险的”) ,但是当你学习语言时,你会发现它非常有用和强大。)