2014-04-23 2 views
2

저는 C++ 학생이며 과제의이 부분을 이해하고 수행하는 데 도움이 될 수 있습니다. 나는 나에게 오류를주는 일이 있다는 것을 알고, 이제C++ 참조로 벡터를 반환하는 방법?

void Invoice::getSalesItems() //error on this line. Code provided by assignment. 
{ 
    return salesItems; //error on this line. 
} 

:

나는 SalesItem 객체의 벡터가 :

class Invoice 
{ 
public: 
    //blabla 
    vector<SalesItem> *getSalesItems(); //code provided by the assignment. 
private: 
{ 
    //blabla 
    vector<SalesItem> salesItems; 
}; 

을 나는 참고로 그 벡터를 반환해야 분명히 틀렸어, 거기에 포인터 나 참고 자료가 없다. 나는이 코드의 몇 줄을 마치 내가보고 싶어하는 (또는 더 현실적으로, 나에게 의미가있는) 예제로 게시하고있다.

나는 다음과 같은 유형의 다른 get 함수처럼 작동하는 get 함수를 원한다. int 또는 string을 반환해야합니다. 할당에 따라 반환해야합니다.

불행히도 벡터 및 참조에 대한 내 이해는이 문제에 도움이되지 않으며 해당 교육 리소스가 없습니다. 이걸 도와 줄 수 있어요. 누군가 내가 무엇을해야하는지 이해하도록 도와 줄 수 있다면 크게 감사하겠습니다.

추가 정보는 기꺼이 제공됩니다.

+3

'벡터 * getSalesItems(); '에 대한 포인터를 반환하고 참조를 반환하지 않습니다. 'void Invoice :: getSalesItems()'는 아무 것도 반환하지 않습니다. 클래스의 함수 정의와 선언은 동일해야합니다 :'vector & getSalesItems();'는 참조로 벡터를 반환합니다. –

답변

8

함수 구현시 void을 반환합니다. 또한 참조에 의한 반품을위한 정확한 선언이 없습니다.

코드는 다음과 같이해야한다 :

헤더 :

class Invoice 
{ 
public: 
    vector<SalesItem> &getSalesItems(); 
private: 
    vector<SalesItem> salesItems; 
}; 

구현 :

vector<SalesItem> &Invoice::getSalesItems() { 
    return salesItems; 
} 
9

당신은 반환 유형을 지정해야합니다. 또한 constnon-const 버전을 모두 제공하는 것이 좋습니다. 코드는 다음과 같이

class Invoice 
{ 
public: 
      vector<SalesItem> &getSalesItems()  { return salesItems; } 
    const vector<SalesItem> &getSalesItems() const { return salesItems; } 
private: 
    vector<SalesItem> salesItems; 
}; 

샘플 사용 :

Invoice invoice; 
vector<SalesItem> &saleItems = invoice.getSalesItems(); // call the first (non-const) version 
const Invoice &const_invoice = invoice; 
const vector<SalesItem> &saleItems = const_invoice.getSalesItems(); // call the second (const) version 
+0

주제에서 약간 벗어나지 만 필자는이 기술 (참조를 얻는 "게터")이 막 대중에게 공개하는 것보다 의미없는 난독 화라고 생각했습니다. –

+0

@MattMcNabb 나는이 경우에'getter '를 옹호하지 않지만, 대중에게 공개하는 것은 더 나쁜 선택이다. 좋은 토론 [here] (http://stackoverflow.com/a/2977045/930095) –

+0

이 토론은 값으로 돌아 오는 "getters"에 관한 것이고, 하나의 게시물은 참조 버전이 기본적으로 공공 회원. (유일한 차이점은 참조에 대한 포인터를 구성원으로 지정할 수 없다는 것입니다). –

관련 문제