클래스의 배정을 위해 BST에서 항목을 검색하려고합니다. 제공된 코드 중 일부는 변경할 수 없습니다. 강사는 BST 클래스에서 호출하는 기능이 같은 모습을 (지금까지) 보이는이배정 연산자 오버로드/검색 함수
static void retrieveItem(char *name)
{
Data const *data;
cout << ">>> retrieve " << name << endl << endl;
if (database->retrieve(name, data))
cout << *data << endl;
else
cout << "not found" << endl;
cout << endl;
}
처럼 보이는 드라이버의 검색 기능 (I 변경할 수없는) 만들었습니다. 함수 호출에 대한 인수를 변경할 수 없습니다. 마지막으로 나는 다음과 같은 과제 과부하를 가지고 데이터 클래스 구현 생성자를 복사 (에 소스 파일을 변경할 수 없습니다이
struct Item
{
Data data; // the data instance must be specified this way, NOT as a pointer
bool isEmpty = true;
int loc = 0;
};
Item *items;
과 같은 항목이라는 구조체의 배열이 있습니다
bool BST::retrieve(const char *key, Data const *& data) const
{
int rIndex = 0;
while (rIndex <= capacity)
{
if (strcmp(items[rIndex].data.getName(), key) == 0)
{
data = items[rIndex].data;
return true;
}
else if (strcmp(items[rIndex].data.getName(), key) < 0)
rIndex = (rIndex * 2) + 1;
else if (strcmp(items[rIndex].data.getName(), key) > 0)
rIndex = (rIndex * 2) + 2;
}
return false;
}
이 중 하나) 내가 틀렸다면
Data::Data(const Data& source)
{
strcpy(this->name, source.name);
}
Data& Data::operator=(const Data& data2)
{
strcpy(this->name, data2.name);
return *this;
}
는 제발 올바른하지만 드라이버에서 자신의 검색 기능의 목표처럼 보인다는 키 (이름을 사용하여 데이터 객체를 검색하는 것입니다) 그런 다음 함수에 전송 된 데이터 인수에 복사합니다. 불행히도, 내 검색 기능 에선
data = items[rIndex].data;
이 작동하지 않습니다. 또는 ->] 저는 90 % 확신합니다. 액세스 할 수있는 올바른 방법입니다. 그러나 "데이터 '에서'const 데이터 * '로의 적절한 변환 유형이 없습니다."
할당 오버로드 연산자를 사용하지 않으면 어떻게 할 수 있습니까? 과부하의 나의 구현은 잘못 되었습니까?
일반적으로 데이터 const * 및 데이터를 의미하지 않습니다. 그와 비슷한 것을 볼 때 그것은 나를 매우 의심스럽게 만든다. – pm100
@ pm100 op는 과제에 제공된 코드이며 그들이 의심스럽지 않더라도 문제가있다. (나는 동의한다. 이상한, 이상한 말) – wakjah