UnicodeString을 키로 Class as value C ++ Builder로 매핑

보호자

C ++ Builder XE7을 사용하고 있습니다. UnicodeString을 키로, 클래스를 값으로 사용하고 싶습니다.

이것은 내 수업입니다 : Historique.h

#ifndef HistoriqueH
#define HistoriqueH
#include <System.Classes.hpp>
#include <string>    

class MyHistorique
{
    public:
        __fastcall MyHistorique();
        __fastcall MyHistorique(const MyHistorique& mh);

        //Getters
        String __fastcall getNumClient(){return numClient;}
        bool __fastcall getTypeAppel(){return typeAppel;}
        String __fastcall getCodeClient(){return codeClient;}
        String __fastcall getDate(){return date;}
        String __fastcall getHeure(){return heure;}
        String __fastcall getNumCti(){return numCti;}
        bool __fastcall getAppelRecuManque(){return appelRecuManque;}
        String __fastcall getDebutConvers(){return debutConvers;}
        String __fastcall getFinConvers(){return finConvers;}
        String __fastcall getDureeConvers(){return dureeConvers;}
        bool __fastcall getFlag(){return flag;}

        //Setters
        void __fastcall setNumClient(String nc){numClient = nc;}
        void __fastcall setTypeAppel(bool ta){typeAppel = ta;}
        void __fastcall setCodeClient(String cc){codeClient = cc;}
        void __fastcall setDate(String d){date = d;}
        void __fastcall setHeure(String h){heure = h;}
        void __fastcall setNumCti(String nCti){numCti = nCti;}
        void __fastcall setAppelRecuManque(bool arm){appelRecuManque = arm;}
        void __fastcall setDebutConvers(String dc){debutConvers = dc;}
        void __fastcall setFinConvers(String fc){finConvers = fc;}
        void __fastcall setDureeConvers(String dureeC){dureeConvers = dureeC;}
        void __fastcall setFlag(bool f){flag = f;}

    private:
        String numClient;
        bool typeAppel;
        String codeClient;
        String date;
        String heure;
        String numCti;
        bool appelRecuManque;
        String debutConvers;
        String finConvers;
        String dureeConvers;
        bool flag;
};

그리고 내 Application.h에서 :

#include <map>
#include "Historique.h"

class TForm1 : public TForm
{
    public:
    std::map<UnicodeString, MyHistorique> myMap;
};

그리고 내 Application.cpp에서 :

void __fastcall TForm1::XPhonePc1EvtIdCall(TObject *Sender, long nIdCall)
{
    ShowMessage(nIdCall);
    myMap[nIdCall] = new MyHistorique();  
}

내가 원하는 것은 빈 개체를 만들고 할당하는 nIdCall것이지만이 오류가 있습니다.

[bcc32 오류] ApplicationPhonePC.cpp (496) : E2285 'operator MyHistoire :: = (MyHistoire *)'에 대한 일치를 찾을 수 없습니다.
전체 구문 분석기 컨텍스트
ApplicationPhonePC.cpp (493) : parsing : void _fastcall TForm1 :: XPhonePc1EvtIdCall (TObject * , long)

레미 르보

오류 메시지는 컴파일러 개체 인스턴스에 포인터를 operator=할당 할 수있는 정의를 찾을 수 없음을 알려줍니다 . 그리고 당신이 하나를 정의하지 않았기 때문에 맞습니다.MyHistorique*MyHistorique

귀하는 std::map실제 포함 MyHistorique당신이 전화를 제거해야하므로, 객체 인스턴스, 객체하지 포인터를 new컴파일러가 호출 할 수 있도록 MyHistorique의 복사 할당 연산자를 대신 :

MyHistorique tmp;
myMap[nIdCall] = tmp;

또는 간단히 :

myMap[nIdCall] = MyHistorique();

또는 MyHistorique현재 필드를 기본값으로 재설정 하는 방법을 추가하는 것이 좋습니다 .

class MyHistorique
{
public:
    void Reset();
};

void MyHistorique::Reset()
{
    numClient = ...;
    typeAppel = ...;
    codeClient = ...;
    ... and so on ...
}

그런 다음이 메서드를 다음과 같이 호출합니다.

myMap[nIdCall].Reset();

그러나 아직 nIdCall존재하지 않는 경우 중복됩니다 std::map. nIdCall새로 삽입, 관련 개체에 의해 반환하기 전에 기본이 건설 한 것입니다 std::map::operator[]당신이 호출 할 필요가 없습니다 것입니다, 그래서 Reset(). std::map::find()중복 작업을 피하는 데 사용할 수 있습니다 .

std::map<UnicodeString, MyHistorique>::iterator iter = myMap.find(nIdCall);
if (iter != myMap.end())
    iter->second.Reset();
else
    myMap.insert(std::make_pair(nIdCall, MyHistorique()));

반면에 이것이 nIdCall항상 새로운 값이고 .NET에 존재하지 않는다는 것을 알고 있다면 std::map위의 모든 것을 무시하고 대신 다음을 수행 할 수 있습니다.

void __fastcall TForm1::XPhonePc1EvtIdCall(TObject *Sender, long nIdCall)
{
    ShowMessage(nIdCall);
    myMap[nIdCall];  
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ Builder> __property with Setter (String)로 인해 오류 발생 [E2034 'UnicodeString'을 'float'로 변환 할 수 없음]

분류에서Dev

TypeScript : 키-값 유형을 값-키로 역 매핑

분류에서Dev

여러 키로 매핑

분류에서Dev

UnicodeString을 BSTR로 변환하는 방법?

분류에서Dev

const char * 키로 C ++ 매핑은 null 검색

분류에서Dev

Entity Framework 6-음수 1을 C # true로 매핑

분류에서Dev

Java : 열거 형을 키로 사용하여 매핑

분류에서Dev

Map을 사용하지 않고 키로 Typescript 열거 형 매핑?

분류에서Dev

Typescript 모든 열거 형 값을 키로 매핑

분류에서Dev

단일 키 누름을 두 번 탭으로 매핑 (Windows)

분류에서Dev

XML 키 값 매핑을 JSON 개체로 변환

분류에서Dev

mootools로 키보드 키 매핑

분류에서Dev

매핑 함수의 C ++ 아날로그

분류에서Dev

문자를 숫자로 매핑 C #

분류에서Dev

내 게임 마우스의 버튼을 키보드 키로 다시 매핑

분류에서Dev

내 게임 마우스의 버튼을 키보드 키로 다시 매핑

분류에서Dev

값 배열을 백분율로 매핑

분류에서Dev

포트 80을 22로 다시 매핑

분류에서Dev

C ++ 17 : 컴파일 타임에 유형을 정수 값으로 매핑

분류에서Dev

C #에서 식별자 및 변수 값으로 값을 매핑하는 방법

분류에서Dev

저장 프로 시저없이 C #을 사용하여 Oracle UDT 매핑

분류에서Dev

플러그인으로 매핑 된 vim 다시 매핑 키

분류에서Dev

Expressjs 경로 매핑

분류에서Dev

여러 키 및 값으로 매핑

분류에서Dev

xmodmap으로 키 조합 매핑

분류에서Dev

벡터를 키 작업으로 매핑

분류에서Dev

Scala : 와일드 카드로 키 매핑?

분류에서Dev

여러 키로 Pandas에서 매핑

분류에서Dev

Angular 2 ..?의 키 배열로 매핑

Related 관련 기사

뜨겁다태그

보관