w****h 发帖数: 212 | 1 就是说,比如构造函数
class Point
{
Point (int x):myX(x) {};
private int myX;
}
那么程序可以直接定义Point u1(10)来定义这个实例u1,其myX=10
现在问题是,我想初始化类时传入一个数组,而不是一个整型变量,比如
class HeapSort
{
HeapSort (int* a):dataHeap(a) {};
public dataHeap[100];
}
当我定义
int a[N];
HeapSort h1(a)时,编译报错说cannot specify explicit initializer for arrays
是不是不能初始化就传入一个数组,而必须在函数里显示初始化数组 |
P********e 发帖数: 2610 | 2 叔祖都是需要你自己来写的
【在 w****h 的大作中提到】 : 就是说,比如构造函数 : class Point : { : Point (int x):myX(x) {}; : private int myX; : } : 那么程序可以直接定义Point u1(10)来定义这个实例u1,其myX=10 : 现在问题是,我想初始化类时传入一个数组,而不是一个整型变量,比如 : class HeapSort : {
|
k**f 发帖数: 372 | 3
parameter 'a' is a pointer to int. HeapSort::dataHeap is an array of int.
They are not the same type. You cannot assign a *int to int[]. This is not
only true in ctors, but also true in normal code. Consider:
void func(int *b)
{
int x[10];
x = b; // compiler error. In fact, x cannot be assigned a new value.
}
In your case, you need to explicitly copy the elements led by *a to dataHeap
, and your ctor interface is insufficient because it does not tell how many
to copy.
Alternatively, if yo
【在 w****h 的大作中提到】 : 就是说,比如构造函数 : class Point : { : Point (int x):myX(x) {}; : private int myX; : } : 那么程序可以直接定义Point u1(10)来定义这个实例u1,其myX=10 : 现在问题是,我想初始化类时传入一个数组,而不是一个整型变量,比如 : class HeapSort : {
|
s***e 发帖数: 122 | 4 你刚好用反了,而且最好传一个长度进去。另外你的语法怎么这么怪,看着这么像Java.
class HeapSort
{
public:
HeapSort (int a[], int len):dataHeap(a), length(len) {};
private:
int * dataHeap;
int length;
}
【在 w****h 的大作中提到】 : 就是说,比如构造函数 : class Point : { : Point (int x):myX(x) {}; : private int myX; : } : 那么程序可以直接定义Point u1(10)来定义这个实例u1,其myX=10 : 现在问题是,我想初始化类时传入一个数组,而不是一个整型变量,比如 : class HeapSort : {
|
h********g 发帖数: 116 | 5 用vector
【在 w****h 的大作中提到】 : 就是说,比如构造函数 : class Point : { : Point (int x):myX(x) {}; : private int myX; : } : 那么程序可以直接定义Point u1(10)来定义这个实例u1,其myX=10 : 现在问题是,我想初始化类时传入一个数组,而不是一个整型变量,比如 : class HeapSort : {
|
w****h 发帖数: 212 | 6 这个传入的长度会自动根数组关联吗?
把a赋给dataHeap,只是首地址赋值吧,整个数组长度也会自动赋值?
Java.
【在 s***e 的大作中提到】 : 你刚好用反了,而且最好传一个长度进去。另外你的语法怎么这么怪,看着这么像Java. : class HeapSort : { : public: : HeapSort (int a[], int len):dataHeap(a), length(len) {}; : private: : int * dataHeap; : int length; : }
|
w****h 发帖数: 212 | 7 我是编写课程要求的任务
dataHeap
【在 k**f 的大作中提到】 : : parameter 'a' is a pointer to int. HeapSort::dataHeap is an array of int. : They are not the same type. You cannot assign a *int to int[]. This is not : only true in ctors, but also true in normal code. Consider: : void func(int *b) : { : int x[10]; : x = b; // compiler error. In fact, x cannot be assigned a new value. : } : In your case, you need to explicitly copy the elements led by *a to dataHeap
|
t****t 发帖数: 6806 | 8 请问你有没有一本C++的入门书, 如果有的话, 请你从头到尾读一遍, 不要快快读, 要
慢慢读
【在 w****h 的大作中提到】 : 我是编写课程要求的任务 : : dataHeap
|
w****h 发帖数: 212 | 9 数组长度是可以看作固定已知的,
所以不需要vector吧,那种动态分配长度空间
【在 h********g 的大作中提到】 : 用vector
|
a*****o 发帖数: 246 | 10 you may write a constructor to take care of this doing copying manually. |
s***e 发帖数: 122 | 11 那就看你是要直接用传入的数组,还是你想内部克隆一个数组了。
在C/C++里面,普通数组的长度你必须自己知道,自己控制。如果你是用Java,那又另
说了。
【在 w****h 的大作中提到】 : 这个传入的长度会自动根数组关联吗? : 把a赋给dataHeap,只是首地址赋值吧,整个数组长度也会自动赋值? : : Java.
|
k**f 发帖数: 372 | 12
Assuming a fixed array size might work for this particular exercise. But if
there's no restriction that prohibits you from using std::vector, I'd
recommend you to use std::vector. Doing so allows you to focus on the
sorting algorithm.
【在 w****h 的大作中提到】 : 数组长度是可以看作固定已知的, : 所以不需要vector吧,那种动态分配长度空间
|
m********7 发帖数: 37 | 13 class HeapSort
{
HeapSort (int* a):dataHeap(a) {};
std::vector dataHeap[100];
} |
k**f 发帖数: 372 | 14
Sorry, I'm afraid both lines are wrong.
A std::vector cannot be initialized by a single pointer. You have to provide
the other pointer pointing to the end of the array outside the array, such
as
HeapSort (int* a):dataHeap(a, a+100) {};
You cannot specify the size of a std::vector in the class definition. You
have to say
std::vector dataHeap;
【在 m********7 的大作中提到】 : class HeapSort : { : HeapSort (int* a):dataHeap(a) {}; : std::vector dataHeap[100]; : }
|