2010-07-26 60 views
0

我有以下代码。我有一个名为SendBookDiffs(MTBookDiff * bookdiffs,UINT bookdiffs_total)的方法,我想使用它。该方法的描述是“此方法接受MTBookDiff结构数组,计算'bookdiffs_total'元素。”将一个结构数组传递给函数

所以我已经试过如下:

MTBookDiff *bookdiffs; 
MTBookItem items[128]; 
bookdiffs->items = items; 

但我遇到了一个“错误C2106:‘=’:左操作数必须是左值”的错误。根据一些答复,我已经尝试过

memcpy(bookdiffs->items, items, sizeof(bookdiffs->items)); 

但是有没有正确的方法来执行它?谢谢! 已编辑:简化问题。基于该

#define MAX_PATH   260 

enum EnMTAPIConstants 
    { 
    MT_SYMBOL_LEN    =32,       
    MT_BOOK_DEPTH    =32,       
    MT_ADDRESS_LEN    =64,       
    MT_NEWSUBJECT_LEN   =256,       
    MT_NEWSCATEGORY_LEN  =256,       
    MT_LOGIN_LEN    =64,       
    MT_PASSWORD_LEN   =64,       
    MT_PARAMS_LEN    =256,       
    MT_DESCRIPTION_LEN   =MAX_PATH      
    } 

struct MTBookItem 
    { 
    enum EnBookItemType 
    { 
     ItemReset=0,           
     ItemSell =1,           
     ItemBuy =2           
    }; 
    UINT    type;         
    double   price;         
    INT64    volume;         
    UINT    reserved[8];       
    }; 

struct MTBookDiff 
    { 
    wchar_t   symbol[MT_SYMBOL_LEN];     
    MTBookItem  items[MT_BOOK_DEPTH*4];     
    UINT    items_total;       
    UINT    reserved[64];       
    }; 

MTBookDiff *bookdiffs; 
MTBookItem items[128]; 
bookdiffs->items = items; 
+1

您无法使用赋值来复制数组。 复制数组(使用std :: copy)或使用矢量 – Anycorn 2010-07-26 06:40:05

回答

1

你需要做以下的一个

  • memcpy(bookdiffs->items, items, sizeof(bookdiffs->items)
  • 变化items字段从MTBookItem items[]MTBookItem *items类型。

编辑 考虑到这是一个C++的问题,使用std::vector如其他人所说,几乎比任何我的两个建议,当然更好。

+0

这是非常不完整的建议。 'memcpy'不是最好的方法,并且将数组中的定义从数组更改为具有主要副作用。 – 2010-07-26 06:46:55

+0

同意。但是我们需要来自OP的更多信息来给出更完整的答案。 (顺便说一句,我没有注意到这是C++而不是C,因此建议使用'memcpy')。 – 2010-07-26 06:54:20

+0

@Steven 那么推荐的方法是什么呢? – user303907 2010-07-26 06:54:21

2

您不能像这样将数组分配给另一个数组。

,而不是因为你是无论如何使用C++,使用矢量

vector<MTBookItem> items 
+0

使用STL肯定是个好建议,但是这里有人不知道指针和数组之间的区别...... – 2010-07-26 06:48:02

+0

@Steven:这对于相当好的有一段时间使用STL。良好的书籍教导了如何使用'std :: vector'之类的低级特性,例如指针和数组以及手动资源管理。 – sbi 2010-07-26 10:49:07

1

你需要一个[]和*之间进行区分。第一个分配的内存块足够容纳指定数量的元素,而变量指向第一个元素。第二只是一个指针,它不一定指向任何东西,可以在其他地方被指定。

使用不受欢迎的符号的风险,匈牙利符号严格区分axpx,前者是一个数组,后者是一个指针。什么是令人困惑的是,你可以通过ax采取px的功能,在这种情况下,参数是初始化为ax的第一个元素的指针。但是,尽管您可以为指针指定一个新值,但您无法为数组执行此操作。