벡터에 레퍼런스를 저장하려면?


std::vector<int &> hello; 같이 int의 레퍼런스를 저장하려고 하면

"error C2528: 'pointer' : pointer to reference is illegal" 에러가 뜹니다.

제가 포인터를 잘 못써서 레퍼런스로 하려는 건데 왜 이런 에러가 뜨는 거죠? 꼭 포인터를 써야 하나요?

  • 2016년 01월 21일에 작성됨

조회수 206


1 답변


좋아요
0
싫어요
채택취소하기

C++11미만의 컴파일러에서

containter 원소의 type은 값을 할당할 수 있어야(assignable) 합니다. 그런데 레퍼런스는 한 번 초기화되면 다른 값을 레퍼런스 할 수 없으므로 assignable하지 않기 때문에 컴파일 에러가 발생하는 것입니다.

C++11부터

C++11부터는 std::reference_wrapper를 써서 레퍼런스를 저장할 수 있습니다.

밑의 예제는 레퍼런스를 vector에 저장해 vector의 원소를 이터레이팅 합니다.

#include <iostream>
#include <vector>

class MyClass{
public:
    int x;
    MyClass(int y): x(y) {}
    void func(){
        std::cout<<"I am func" << std::endl;
    }
};
int main(){
    std::vector<std::reference_wrapper<MyClass>> vec;
    MyClass obj1(2);
    MyClass &obj_ref1=std::ref(obj1);
    vec.push_back(obj_ref1);
    for( auto ob : vec)
    {
        std::remove_reference<MyClass&>::type(ob).func();
        std::cout<<std::remove_reference<MyClass&>::type(ob).x<< std::endl;
    }

}
  • 2016년 01월 21일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close