일반 데이터 형식을 저장하는지도 클래스 템플릿이 있습니다. 지도 클래스의 색인 생성을 위해 문자열을 사용해야합니다. 초기화되지 않은 요소에 액세스하려는 경우 초기화되지 않은 예외를 throw해야합니다. 메인은 다음과 같습니다사용되지 않는 변수가있는 C++ 예외
mapClass <double> mc;
mc[”aaa”] = 3.5;
double var1 = mc[“aaa”];
cout << var1 << endl; //print 3.5
try{
double var2 = mc[“aab”]; //uninitialized error: throw exception
}catch(classMap<double>::Uninitialized&){
cout<< ”Uninitialized error…..”<<endl;
}
내 생각은 키 (문자열)를 저장합니다 mapClass 템플릿 및 가치 (T) 요소의 내부 노드 클래스를 만드는 것입니다. T 요소에 대한 참조를 반환하는 연산자 [] 오버로드를 구현했습니다. 이 연산자 [] overload는 지정된 문자열이 벡터 안에 존재하지 않으면 새로운 요소를 push_back합니다.
template< typename T >
class mapClass{
public:
class Uninitialized{};
class Node{
public:
string key;
T value;
bool asigned;
Node(){
key = "";
asigned = false;
}
~Node(){}
};
mapClass(){
initialized=false;
max=0;
}
T& operator[](string a){
int ret;
bool out = false;
if (!initialized){
Node newNode;
nodeArray.push_back(newNode);
nodeArray[0].key = a;
initialized = true;
max = 0;
ret = 0;
}
else{
for (int i = 0; i <= max; i++){
if (nodeArray[i].key == a){
out = true;
ret = i;
}
}
if (!out){
max++;
ret = max;
Node newNode;
nodeArray.push_back(newNode);
nodeArray[max].key = a;
}
}
return nodeArray[ret].value;
}
private:
vector<Node> nodeArray;
bool initialized;
int max;
};
지금 프로그램은 값 3.5를 출력뿐만 아니라, (주위 -8578623 이동) 값 대신 예외 발생을 출력한다. 문제는 코드의 어느 부분에서 예외를 throw해야하는지 모르며 변수가 초기화되지 않았는지 확인하는 방법을 알지 못한다는 것입니다. 도움을 주셔서 감사합니다.
그럼 '던짐'은 어디 있습니까? –
푸시 백 후에 nodeArray.back()을 사용하여 전체 nodeArray [max] 로직을 스켈치 칠 수 있다는 것을 알고 있습니다. – WhozCraig