由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请问C++如何初始化类时就传入一个数组参数
相关主题
C++ 里push_back 一问C++一问
C++debug遇到的问题一个windows编程问题
copy constructor问题。int &x=y;的问题
C++编程原则的问题请教一道入门小题
刚看完类这一章,有些大小问题,请指教,谢谢帮忙找个错
C++的"初始化"小结请教C里面动态数组的赋值
C++ auto type是怎么推算的?包含指针的类和vector的问题
一个hash table的简单问题[合集] C语言bit操作问题,急!
相关话题的讨论汇总
话题: dataheap话题: int话题: heapsort话题: 数组话题: vector
进入Programming版参与讨论
1 (共1页)
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];
: }

1 (共1页)
进入Programming版参与讨论
相关主题
[合集] C语言bit操作问题,急!刚看完类这一章,有些大小问题,请指教,谢谢
程序中的各个变量/数组的内存地址是否会混在一起?C++的"初始化"小结
C里面的数组拷贝C++ auto type是怎么推算的?
c里全局数组的再次赋值问题一个hash table的简单问题
C++ 里push_back 一问C++一问
C++debug遇到的问题一个windows编程问题
copy constructor问题。int &x=y;的问题
C++编程原则的问题请教一道入门小题
相关话题的讨论汇总
话题: dataheap话题: int话题: heapsort话题: 数组话题: vector