면책 조항 : 이것은 과제를 처리하기위한 것이지만, 제 코드를 쓰는 사람을 찾고있는 것이 아닙니다. 나는 잘못된 방향과 올바른 방향에 대한 조언을 찾고 있습니다.클래스 멤버 (변수?)를 함수에 전달하는 방법은 무엇입니까?
형식화 된 데이터 (시간, 온도, 풍속)가있는 파일이 있습니다. 나는 3 개의 다른 "사슬"로 연결된 목록을 작성하기로되어있다. 각 체인은 동일한 데이터를 가지지 만 시간이있는 체인이 시간순으로 모든 데이터를 읽을 수 있도록 순서가 다릅니다. 임시 체인 체인은 임시 순차적 순서로 데이터를 읽고 풍속 체인은 풍속 순차로 데이터를 읽는다.
주어진 포인터에서 데이터를 성공적으로 읽을 수 있고 시간별 목록을 올바르게 구성 할 수있는 함수를 작성했습니다. 하지만 이제는 같은 함수를 사용하여 동일한 포인터를 읽고 다른 두리스트를 구성하려고합니다. 이에
timeHead-> 시간
:
whicheverLinkedListHeadIwant을 제가하고 싶은 것은이를 켭니다 기본적으로
void datalogger::addData(int timestamp, double temperature, double windspeed){
weatherdata *n;
n = new weatherdata;
n->time = timestamp;
n->temp = temperature;
n->wind = windspeed;
n->next = nullptr;
ll.addData(n, 1);
}
void linkedlist::addData(weatherdata *newData, int selectionNo){
weatherdata *selection;
switch(selectionNo){
//linkedlist: TIME
case 1:
selection = timeHead;
break;
//linkedList: TEMP
case 2:
selection = tempHead;
break;
//linkedList: WIND
case 3:
selection = windHead;
break;
}
int marker = 0;
weatherdata *node;
weatherdata *current;
weatherdata *nextNumber;
node = new weatherdata;
node = newData;
node->next = nullptr;
//very first entry
if (selection == nullptr){
selection = node;
marker = 1;
}
//item should instead be in the first position
if (newData->time < selection->time){
nextNumber = timeHead;
selection = node;
node->next = nextNumber;
}
else {
//traverse the list until we find the correct place to put it in
current = selection;
nextNumber = selection->next;
//while "not yet at the end of the list"
while (nextNumber != nullptr){
//if its the same as another item DELETE
if ((newData->time == current->time) || (newData->time == nextNumber->time)) {
marker = 1;
break;
}
//the new item goes between the current and nextNumber
else if ((current->time < newData->time) && (newData->time < nextNumber->time)){
current->next = node;
node->next = nextNumber;
break;
}
//otherwise increment current and nextNumber for the next comparison
else {
current = nextNumber;
nextNumber = nextNumber->next;
}
}
//item goes at the end of the list
if ((nextNumber == nullptr) && (marker != 1)){
current->next = node;
}
}
switch(selectionNo){
case 1:
timeHead = selection;
break;
case 2:
tempHead = selection;
break;
case 3:
windHead = selection;
break;
}
}
: 여기
는 관련 코드 -> 클라스 회원이되는 것그런 식으로 동일한 함수를 사용하여 세 개의 연결된 목록을 모두 처리 할 수 있습니다. 당신이 눈치 챘을 것 같은데, 내 linkedlist :: addData 함수의 시작 부분에 switch 문을 사용하여 "whicheverLinkedListHeadIwant"를 처리하는 코드를 얻을 수 있었지만, 내 인생에서 "어느 것이든지 ClassMemberIwant"를 얻을 수 없었습니다. 작업.
이 내가 무엇을 시도했다입니다 :
char* classMemberSelection = "temp";
또는 char* classMemberSelection = "wind"
whicheverLinkedListHeadIwant->classMemberSelection;
그러나 컴파일러는 그냥 classMemberSelection 말하는 오류를 반환은 구성원이 아닙니다. 나는 그것이되고 싶은 두 번째 부분을 만드는 방법에 대한 손실이 있습니다.
이 질문이 맞지 않다면 죄송합니다. 나는 가능한 한 명확 할 수 있도록 최선을 다했지만이 모든 것을 가지고 초보자입니다. 프로젝트의 추가 부분을 게시해야한다면, 기꺼이 기꺼이받을 수 있습니다.
를 호출 여기에 시도하는 몇 가지 아이디어는 다음과 같습니다 A) 세 가지 나열합니다. 세 가지 모두에 데이터를 추가하십시오. 그런 다음 모든 항목을 추가 한 다음 세 목록을 정렬하십시오. B) 삽입 할 항목을 매개 변수로 사용하는 링크 된 목록의 한 삽입 기능과 목록에서 항목을 배치해야하는 위치를 결정하기 위해 삽입 기능이 사용하는 세 가지 비교 기능 중 하나에 대한 포인터. – user4581301
당신이 시도한 것이 작동하지 않는 이유에 대한 주석 : 코드를 읽을 수 있도록 만드는 데 사용하는 멋진 이름, 좋은 방법은 컴파일러에서 제거하고 오프셋과 주소로 바꾼 것입니다. 프로그램의'addData'는 0xFEDD00D와 같고'selection'은 스택 포인터 + 16입니다. "wind"는 런타임시 아무 것도 의미하지 않으며 컴파일러는 변수 이름이 아니라 단지 문자열입니다. – user4581301
이것은 의심스러운'node = new weatherdata; node = newData; ' – greatwolf