2017-05-15 6 views
0

초보자 용 C++입니다.struct에 대한 포인터가 작동하지 않습니다.

데이터 구조를 배우고 있으며 루프 내부의 함수를 가리키는 방법을 알 수 없습니다. 예 :

struct book 
{ 
    string author; 
    string title; 
    int publicationYear; 
}; 

void setBook(book&); 
int main() 
{ 
    book bookInfo[3]; 
    setBook(bookInfo); 
    return 0; 
} 

void setBook(book &bookToSet) 
{ 
    for(int i = 0; i < 3; i++) 
    { 
    cout << "Who is the author of the book: "; 
    cin >> bookToSet[i].author; 
    cout << "What is the title of the book: "; 
    cin >> bookToSet[i].title; 
    cout << "In what year was the book published: "; 
    cin >> bookToSet[i].publicationYear; 
    } 
}  

이것은 작동하지 않으며 이유가 확실하지 않습니다.

함수의 루프 안에서도 (bookToSet + 1).author (주소 참조)을 작성하려고 시도했지만 작동하지 않았습니다.

나는 포인터와 주소로 상당히 어려움을 겪고있다.

편집 :
제목, 작성자 및 발행 연도를 인쇄하기 위해 setBooks와 비슷한 기능을 만들려고했으나 컴파일되지 않습니다. 오류가 어디 있습니까? 당신은 setBook 기능

void printBooks(book bookToPrint, int cout) 
{ 
    for(int i = 0; i < cout; i++) 
    { 
    cout << bookToPrint[i].title << " " << bookToPrint[i].author << " " << bookToPrint[i].publicationYear << endl; 
    } 
} 
+0

"루프 내부 함수를 가리키는 방법"이 문장은 불완전한 것처럼 보입니다. 또한 "이것은 작동하지 않습니다"라는 정보가 너무 적습니다. 어떻게 작동하지 않습니까? 컴파일러 오류? 런타임 에러? 예기치 않은 결과가 있습니까? – user463035818

+1

btw 코드에서 포인터/주소가 보이지 않고 포인터를 사용할 필요가 없습니다. – user463035818

+0

편집 할 때'count'와'std :: cout'을 혼동하고 첫 번째 인수 유형. 배열을 함수에 전달하는 방법에 대한 자습서를 찾아 볼 수 있습니까? – Lanting

답변

1

그러나 당신이 그것을 포인터를 전달하는 책에 대한 참조를 받아들입니다. 이것은 3 권의 책을 만들었 기 때문입니다. .

함수 setbook이이 한 권의 책을 설정하는 당신이 그것을 사용하는 것처럼 보일 수 있습니다

이 (그렇지 않으면 당신은 그것을라고해야 setBooks은 다음과 같아야합니다

struct book 
{ 
    string author; 
    string title; 
    int publicationYear; 
}; 
void setBook(book&); 
int main() 
{ 
    book bookInfo[3]; 
    for(int i = 0; i < 3; i++) 
    { 
    setBook(bookInfo[i]); 
    } 
    return 0; 
} 

void setBook(book &bookToSet) 
{ 
    cout << "Who is the author of the book: "; 
    cin >> bookToSet.author; 
    cout << "What is the title of the book: "; 
    cin >> bookToSet.title; 
    cout << "In what year was the book published: "; 
    cin >> bookToSet.publicationYear; 
}  

또는 대안

struct book 
{ 
    string author; 
    string title; 
    int publicationYear; 
}; 
void setBooks(book *, int); 
int main() 
{ 
    book bookInfo[3]; 
    setBooks(bookInfo ,3); 
    return 0; 
} 

void setBooks(book *booksToSet, int count) 
{ 
    for (int i = 0; i != count; ++i) 
    { 
    cout << "Who is the author of the book: "; 
    cin >> booksToSet[i].author; 
    cout << "What is the title of the book: "; 
    cin >> booksToSet[i].title; 
    cout << "In what year was the book published: "; 
    cin >> booksToSet[i].publicationYear; 
    } 
}  
+0

그리고 나서 두 번째 예제에서'set'을'setBooks'에도 전달하고 싶습니다. – CompuChip

+0

첫 번째 버전은 알았지 만 함수 내부에 루프가 있고 코드의 두 번째 버전이 원합니다 컴파일하지 마라. 아이디어가 있으십니까? –

+0

@Lanting은'setBooks'를 호출 할 때 카운트를 통과하지 못했습니다. 'main'의 줄은'setBooks (bookInfo, 3);' – user31601

0

포인터참조이 서로 섞여 있습니다. 두 가지가 다르며 많은 문제가 있지만 에 어느 쪽이든으로 해결 될 수있다, 그들은 아주 다른 방법으로 작동한다. 차이점을 설명하는 세부 사항을 설명하지 않을 것이며,이 주제에 이미 많은 문서가 있으므로 (예를 들어, this SO 질문에 대해 살펴보십시오).

게시 한 특정 문제로 시작하려면 @ Lanting의 대답이 좋습니다.

+0

이것은 코멘트 일 것입니다. IMHO –

+0

그것을 할 수있는 첫 번째 방법은, 전에 알아 냈어요,하지만 두 번째 방법 (함수 안에 루프를 가지고)에 관심이 있어요. 그의 두 번째 코드는 내가 관심있어하는 컴파일되지 않습니다. 나는 그것을 같은 방식으로 시도했다. –

+0

@Federico 그것은 완전한 대답이 될 것입니다. 그러나 글을 쓰면서 Lanting이 저에게 먼저 들어 왔음을 알았고 정확하게 말할 말을하고있었습니다. 당신 말이 맞아요. 나는 코멘트로 다운 그레이드 할 수 있었다. – user31601