2010-07-26 6 views
0

다음 코드가 있습니다. 나는 SendBookDiffs (MTBookDiff * bookdiffs, UINT bookdiffs_total)라는 메서드를 사용하고 싶습니다. 이 메서드에 대한 설명은 "이 메서드는 'bookdiffs_total'요소를 계산하여 MTBookDiff 구조체 배열을 허용합니다."구조체의 배열을 함수에 전달

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

그러나 나는 "오류 C2106를 : '=': 왼쪽 피연산자는 L-값이어야합니다"발생했습니다 오류

그래서 내가 무엇을 시도하면 다음과 같다. 일부 답장에 따르면, 나는 시도했다

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

답변

1

기준 자료 :

  • memcpy(bookdiffs->items, items, sizeof(bookdiffs->items)
  • 변화 MTBookItem items[]에서 MTBookItem *itemsitems 필드의 유형입니다.

편집 이 사용하는 C++ 질문임을 감안할 std::vector 다른 사람들이 거의 확실히 더 나은 내 두 제안 중 하나를보다 제안한다.

+0

이것은 매우 불완전한 조언입니다. 'memcpy'는 최선의 방법이 아니며, 배열마다 정의를 변경하는 것은 주요 부작용이 있습니다. –

+0

동의. 그러나 OP에서 더 많은 정보를 얻으려면보다 완전한 대답을해야합니다. (덧붙여서, 나는 이것이 C가 아니라 C++이기 때문에'memcpy '에 대한 제안을 알지 못했다.) –

+0

@Steven 그 때 권장되는 방법은 무엇입니까? – user303907

2

배열을 다른 배열에 할당 할 수 없습니다. 어쨌든 C++를 사용하는 대신 이후

는, 당신은 []와 *는 구별 할 필요가

vector<MTBookItem> items 
+0

STL을 사용하는 것은 좋은 조언이지만 포인터와 배열의 차이를 아직 모르는 사람이 있습니다 ... –

+0

@Steven : 어느 것이 좋습니다 STL을 사용하는 동안. 좋은 책은'std :: vector' 등을 사용하는 법을 가르친 후에 포인터와 배열, 수동 자원 관리와 같은 저수준의 기능을 가르칩니다. – sbi

1

벡터를 사용합니다. 첫 번째 요소는 지정된 수의 요소를 보유 할만큼 큰 메모리 블록을 할당하고 첫 번째 변수를 가리키는 변수는 남겨 둡니다. 두 번째는 단지 포인터 일 뿐이며, 아직 포인터를 가리 키지 않고 다른 곳에서 다시 부름을받을 수 있습니다.

인기가없는 표기법을 사용할 위험이있는 경우 헝가리 표기법은 axpx을 엄격하게 구분합니다. 여기서 앞은 배열이고 후자는 포인터입니다. 혼란스러운 점은 axpx을 취하는 함수로 전달할 수 있으며,이 경우 매개 변수는 의 첫 번째 요소로 초기화 된 포인터입니다. 그러나 포인터에 새로운 값을 할당 할 수는 있지만 배열에 대해서는 포인터를 사용할 수 없습니다.