잘못되고있는 문제와 해결 방법을 파악하는 데 어려움을 겪고 있습니다. 난 포인터를 통해 클래스의 과부하 배열 첨자 연산자 ([])를 사용하고 있지만, I는 컴파일러 에러를 받고있어 : 예상 비정규-ID 를 다음 설명C++ 포인터에 오버로드 된 연산자를 사용하는 문제 : 예상 된 비 한정 ID 오류
if (!(books->[i].isEmpty()) && books->[i].getIsbn() == ISBNnumber) {
if (numBooks <= books->[i].getQty()) {
listToPrint.push_back(books->[i]);
qntyPurchased.push_back(numBooks);
books->[i].setQty(books->[i].getQty() - numBooks);
} else {
cout << "\nThere aren't enough copies to fulfill this order.\n\n";
}
foundFlag = true;
break;
}
참고로
으로 'books'는 다른 클래스의 인스턴스에 대한 포인터를 저장하는 클래스 멤버입니다.
class Menu {
private:
// Pointer to a bookCollection object
static BookCollection *books;
}
class BookCollection
{
static const int MAX_BOOKS = 20;
BookData book[MAX_BOOKS]; // array of BookData objects
int findBook(string);
public:
BookData &operator[](const int i) { return book[i];
}
것은 내가 배열 첨자 연산자와 같은 또 다른 포인터를 치료하는 컴파일러에 대한 기대했지만, 제대로 동작하지 않습니다. (books-> operator.isEmpty()) 연산자 함수 호출을 사용하면 작동합니다. 그러나이 코드는 더 깨끗한 코드를 사용하지 않기 위해 노력했습니다.
제안 오류 해결하기 위해 찾고 :이 식 (그리고 다른 유사한 표현)
books->[i].isEmpty()
구문이 유효하지 않습니다 예를 들어 예상 비정규-ID
'책 -> [I] .isEmpty()'->'책 [I] .isEmpty()': 물론)
는 다음과 같은 작업 예제를 참조하십시오? –
@wlovo 당신은 books-> operator [] (i) .isEmpty()를 의미하는 것처럼 보입니다. 또는 (* books) [i] .isEmpty() –
books [i] .isEmpty는 작동하지 않지만 (* books) [i] .isEmpty는 작동합니다. 다시 한번 감사드립니다. – wlovo