2014-12-01 2 views
-3

나는 목록을 인쇄하는 기능이 있습니다. 그러나, 나는 그 목록에 대한 포인터를 전달하고 있으며, 목록 인쇄를위한 다음 코드는 작동하지 않는다. 즉, 가리 키지 않은 경우 목록을 인쇄하는 코드입니다.해당 목록에 대한 포인터를 사용하여 목록 인쇄

print(std::string svar, std::list<person> *persons){ 
    for (std::list<person>::iterator it = persons.begin(); it != persons.end(); it++) { 
     std::cout << *it << " "; 
    } 
} 

포인터가 persons 인 계정 변경 방법을 잘 모르겠습니다.

+1

포인터를 역 참조 할 필요가 있습니다 :'persons-> begin()', 등등. – 5gon12eder

답변

1

몇 가지 방법으로 해결할 수 있습니다.

  1. 함수에 대한 인수를 참조 포인터로 변경하십시오.

    void print(std::string svar, std::list<person> const& persons){ 
        for (std::list<person>::const_iterator it = persons.begin(); it != persons.end(); it++) { 
         std::cout << *it << " "; 
        } 
    } 
    
  2. 포인터 사용 방식을 변경하십시오.

    void print(std::string svar, std::list<person>* persons){ 
        for (std::list<person>::iterator it = persons->begin(); it != persons->end(); it++) { 
         std::cout << *it << " "; 
        } 
    } 
    

나는 첫 번째 옵션을 사용하여 권합니다.

1

예제에서 persons은 목록 자체가 아닌 목록에 대한 포인터입니다. 그것은 역 참조에 -> 연산자를 사용하여, 더 나은 아직

void print (std::string, std::list<person> *persons) 
{ 
    for (std::list<person>::iterator it = persons->begin(); it != persons->end(); it++) 
    { 
     std::cout << *it << " "; 
    } 
} 

또는를 참조로 받아 루프 기반의 범위를 사용 (C++ 11 가정) :

void print (const std::list<person>& persons) 
{ 
    for (auto&& person : persons) 
    { 
    std::cout << person << " "; 
    } 
} 

당신은 이름 고려해 볼 수 있습니다 포인터 변수가 다릅니다 (예 : person* pPerson).

1

을 복사하지 않고 물체를 통과하는 관용적 방법은 참조를 사용하는 것입니다하지 포인터 : 당신처럼

print(std::string const & svar, std::list<person> const & persons); 

당신은 list 객체 자체에 정확하게 참조를 통해 list의 멤버에 액세스 할 수 있습니다 당신이 CONST-정확성을 수정하는 경우, 그래서 당신의 코드가 작동합니다 :

for (std::list<person>::const_iterator it = persons.begin(); ... 
         ^^^^^^ 

하는 C++ (11)는,보다 편리하게 수행 할 수 있기 때문에 :

,173,

또는

for (person const & p : persons) { 
    std::cout << p << " "; 
} 

당신이 정말로 어떤 이유로 포인터 약 깨끗이하려면

는 다음 list 회원은 또한 그것의 있는지 확인해야합니다 .

for (auto it = persons->begin(); it != persons->end(); ++it) 
         ^^ 

보다는 ->를 사용하여 액세스 이러한 함수는 사람들에게 null 포인터를 전달하도록 초대하기 때문에 먼저 null이 아닙니다.

관련 문제